【问题标题】:Porting Chrome extension using jQuery to Firefox SDK Add-on使用 jQuery 将 Chrome 扩展移植到 Firefox SDK 附加组件
【发布时间】:2015-05-10 00:57:34
【问题描述】:

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

安迪

【问题讨论】:

    标签: jquery google-chrome firefox require commonjs


    【解决方案1】:

    这行得通:

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

    【讨论】:

      【解决方案2】:

      谢谢安迪!它似乎工作得很好!

      当我读到您必须对 jQuery 进行一些修改时,我打算提交一个修复程序,但结果证明已经有人这样做了!

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

      不过,它已在 jQuery 3.0.0-alpha1 中发布。

      【讨论】:

        猜你喜欢
        • 2011-06-07
        • 1970-01-01
        • 1970-01-01
        • 2013-06-13
        • 2015-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-22
        相关资源
        最近更新 更多