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