使用jQuery将Chrome扩展程序移植到Firefox SDK附加组件

时间:2015-03-08 21:54:52

标签: jquery google-chrome firefox require commonjs

我的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对象。

安迪

2 个答案:

答案 0 :(得分:2)

这有效:

    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错误。

答案 1 :(得分:0)

谢谢安迪!它看起来很漂亮!

当我读到你不得不破解jQuery时,我开始提交一个修复程序,但事实证明有人那样做了!

https://github.com/jquery/jquery/commit/842958e7aecd0d75a7ee9e2aaec83457701aa2f3

它已经在jQuery 3.0.0-alpha1中发布了。