【问题标题】:Use jQuery on Firefox Addon SDK background page在 Firefox Addon SDK 背景页面上使用 jQuery
【发布时间】:2012-08-22 15:38:52
【问题描述】:

我正在将一个扩展从 Google Chrome 移植到 Firefox 的 Addon SDK (v1.9)。由于它在后台页面(Firefox 上的 main.js)上使用 jQuery,我想在 Firefox 版本上也使用该库。但是,由于无法从插件代码本身访问窗口对象(并且 jQuery 广泛基于此),我想知道是否有更好的方法从插件代码实现 jQuery 库。也许有一种方法可以使用“require('jquery')”将 jQuery 作为模块导入。

澄清一下,我知道如何在内容脚本上实现 jQuery。我要做的是在插件代码本身上使用 jQuery,例如“main.js”(或您给背景“主”模块提供的任何名称)。

【问题讨论】:

  • 没有“背景窗口”,模块在没有任何窗口的沙盒上下文中执行。除非我错过了某个人,否则即使您设法导入了 jQuery,jQuery 在这种情况下也绝对没用。
  • 我想 chrome 中的 1 个小用例是跨域请​​求。在附加 SDK 中,您将改为使用请求模块:addons.mozilla.org/en-US/developers/docs/sdk/latest/packages/…
  • 我只有一些简单的函数,例如在 Google Chrome 版本的插件中使用的 $.each() 和 $.ajax()。我想我将不得不在没有 jQuery 的情况下实现它们。
  • 对于 $.ajax,使用请求模块。对于 $.each 或类似的,您可以使用 Array 对象的 forEach 迭代器模式,或者 for 循环,或者...
  • 除非我误解了(或者这个功能在问题发布后已经添加:))为什么不直接使用 pageModcontentScriptFile 呢?这将使您可以将 jquery 注入可以访问页面内容的插件的内容脚本代码中。然后您可以使用port 消息在插件和内容脚本之间进行通信。

标签: javascript firefox firefox-addon firefox-addon-sdk


【解决方案1】:

结论是不可能(或很难)包括在内。

但是,如前所述,在大多数情况下它是没有意义的(因为我们无法从背景页面访问窗口对象)。

【讨论】:

    【解决方案2】:

    我也在将一个扩展从 Chrome 移植到 Firefox,并设法想出了这个:

    var {Cc, Ci} = require("chrome");
    _window = Cc["@mozilla.org/appshell/appShellService;1"]
        .getService(Ci.nsIAppShellService).‌​hiddenDOMWindow;
    
    $ = require('jquery')(_window);
    

    还有一点细节here

    如今,jQuery 在非 DOM 上下文中有很多用途,尤其是 Deferreds 和 ajax 的东西,以及像 extend 之类的实用程序。不得不将跨浏览器的 jQuery 代码重写为特定于 Firefox 的代码会令人沮丧,例如请求模块。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多