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

我的Chrome扩展程序在后台页面中使用了jQuery,例如jQuery.extend()jQuery.ajax()jQuery.deferred() ,(不是DOM操作的东西,在后台页面中没有意义) 。

将此代码迁移到Firefox SDK附加组件 ,没有后台window对象,jQuery需要工作,所以类似于

 var $ = require('../3rdparty/jquery.min')(window); 

这是jQuery在类似CommonJS的环境中工作的方式,失败了,jQuery本身抛出一个jQuery requires a window with a documentexceptionjQuery 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时,我开始提交一个修复但事实certificate有人已经做到了!

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

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