2012-08-22 53 views
3

我正在將Google Chrome的擴展程序移植到Firefox的Addon SDK(v1.9)中。由於它在後臺頁面上使用jQuery(Firefox上的main.js),我想在Firefox版本上使用該庫。然而,由於窗口對象不能從插件代碼本身訪問(並且jQuery廣泛基於此),所以我想知道是否有更好的方式從插件代碼實現jQuery庫。也許有一種使用「require('jquery')」作爲模塊導入jQuery的方法。在Firefox Addon SDK上使用jQuery背景頁面

爲了澄清,我知道如何在內容腳本上實現jQuery。我想要做的就是在插件代碼本身上使用jQuery,比如「main.js」(或者你給背景「主」模塊的任何名字)。

+1

沒有「背景窗口」,模塊在沒有任何窗口的沙盒環境中執行。除非我錯過了某人,即使你設法導入它,jQuery在這種情況下也是完全沒用的。 –

+0

我想在chrome中有一個輕微的用例就是跨域請求。在附加SDK中,您將使用請求模塊:https://addons.mozilla.org/en-US/developers/docs/sdk/latest/packages/addon-kit/request.html – canuckistani

+0

我只是有一些簡單的功能,例如Google Chrome版插件中使用的$ .each()和$ .ajax()。我想我必須在沒有jQuery的情況下實現它們。 – josesigna

回答

1

我也移植從Chrome瀏覽器Firefox的擴展,並設法想出這個:

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

$ = require('jquery')(_window); 

有更多的細節here

如今在非DOM上下文中有很多jQuery的用法,特別是Deferreds和ajax的東西,以及像擴展這樣的工具。不得不重寫跨瀏覽器的jQuery代碼以使其成爲特定於Firefox的代碼,例如請求模塊。

2

結論是,它是不可能的(或非常難)包括在內。

但是,如前所述,在大多數情況下它是沒有意義的(因爲我們沒有從背景頁面訪問窗口對象)。