2012-01-18 95 views
0

我正在使用很多外部服務的firefox擴展,我想要在服務器上託管這些外部服務的.js文件,然後加載每個服務在需要時進入擴展。加載外部js來「擴展」firefox擴展

這些外部js文件不是在firefox窗口中執行的「普通js」,它們包含應該在擴展上下文中執行的代碼,例如他們需要使用Components.classes["@mozilla.org/embedcomp/prompt-service;1"]

例如:

var myExtensionName = { 
    init: function() { 

    }, 

    service1_func: function() { 

    } 
} 

我希望能夠從外部文件加載service1_Func,它應該工作一樣,如果它被硬編碼到擴展名的文件。我需要這個的原因是因爲service1_Func需要經常更新,我不想每次更新整個擴展。我知道這可能會造成一些安全風險,但擴展並不是用於分發,但它將在20多臺計算機上使用,因此這將是我維護它的最簡單方法。

我怎麼能做到這一點?

英語不是我的主要語言,所以我希望我解釋清楚自己,如果我需要澄清某些問題,請提出意見和問題。

回答

0

警告:這是一個安全漏洞,不要在其他人應該使用的擴展中這樣做!

使用XMLHttpRequest下載JavaScript文件和Function構造函數來「編譯」它。事情是這樣的:

var request = new XMLHttpRequest(); 
request.open("GET", "http://example.com/func1.js"); 
request.addEventListener("load", function() 
{ 
    myExtensionName.service1_func = new Function(request.responseText); 
}, false); 
request.send(); 

http://example.com/func1.js應該包含函數體(不包括周邊function() {})。

+0

太棒了,它的工作原理。你知道是否可以從一個js文件一次加載整個擴展,而不是爲每個函數加載一個js? – user979390 2012-01-18 23:39:32

+0

當然,它會 - 編譯你得到的源代碼並立即調用它:'(new Function(request.reponseText))()'。巨大的安全漏洞。 – 2012-01-19 07:39:15

+0

非常感謝,我瞭解安全風險,但承載它的服務器甚至不會在線,只是在同一個網絡上。 – user979390 2012-01-19 11:52:54