使用 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 中发布。