使用 jQuery 将 Chrome 扩展移植到 Firefox SDK 附加组件
Porting Chrome extension using jQuery to Firefox SDK Add-on
我的 Chrome 扩展在后台页面中使用了 jQuery,例如 jQuery.extend()
、jQuery.ajax()
、jQuery.deferred()
、(不是 DOM 操纵东西,在后台页面中没有意义)。
将此代码迁移到 Firefox SDK Add-on,没有背景 window
对象,jQuery 需要它才能工作,所以类似
var $ = require('../3rdparty/jquery.min')(window);
jQuery 在类似 CommonJS 的环境中的工作方式失败了,jQuery 本身抛出了 jQuery requires a window with a document
异常。
有什么方法可以在基于 Firefox SDK 的附加组件中使用 jQuery 吗? Page Workers 看起来很有希望,但我无法掌握底层的 window
对象。
安迪
这个有效:
var {Cc, Ci} = require("chrome");
_window = Cc["@mozilla.org/appshell/appShellService;1"]
.getService(Ci.nsIAppShellService).hiddenDOMWindow;
$ = require('../3rdparty/jquery')(_window);
但是,我必须自己修补 jQuery (2.1.3),将第 3441 行更改为
window.setTimeout( jQuery.ready );
我有理由相信这是一个 jQuery 错误。
谢谢安迪!看起来效果不错!
当我得知您必须对 jQuery 进行一些修改时,我打算提交一个修复程序,但事实证明有人已经这样做了!
https://github.com/jquery/jquery/commit/842958e7aecd0d75a7ee9e2aaec83457701aa2f3
它已在 jQuery 3.0.0-alpha1 中发布。
我的 Chrome 扩展在后台页面中使用了 jQuery,例如 jQuery.extend()
、jQuery.ajax()
、jQuery.deferred()
、(不是 DOM 操纵东西,在后台页面中没有意义)。
将此代码迁移到 Firefox SDK Add-on,没有背景 window
对象,jQuery 需要它才能工作,所以类似
var $ = require('../3rdparty/jquery.min')(window);
jQuery 在类似 CommonJS 的环境中的工作方式失败了,jQuery 本身抛出了 jQuery requires a window with a document
异常。
有什么方法可以在基于 Firefox SDK 的附加组件中使用 jQuery 吗? Page Workers 看起来很有希望,但我无法掌握底层的 window
对象。
安迪
这个有效:
var {Cc, Ci} = require("chrome");
_window = Cc["@mozilla.org/appshell/appShellService;1"]
.getService(Ci.nsIAppShellService).hiddenDOMWindow;
$ = require('../3rdparty/jquery')(_window);
但是,我必须自己修补 jQuery (2.1.3),将第 3441 行更改为
window.setTimeout( jQuery.ready );
我有理由相信这是一个 jQuery 错误。
谢谢安迪!看起来效果不错!
当我得知您必须对 jQuery 进行一些修改时,我打算提交一个修复程序,但事实证明有人已经这样做了!
https://github.com/jquery/jquery/commit/842958e7aecd0d75a7ee9e2aaec83457701aa2f3
它已在 jQuery 3.0.0-alpha1 中发布。