2014-04-27 72 views
2

$(document).ready(...)中的腳本不起作用,有什麼想法爲什麼? 看來我試圖注入的腳本最後被加載。Firefox插件SDK注入jquery

這裏我的代碼:

main.js

pageMod.PageMod({ 
    include: "*", 
    contentScriptWhen: 'start', 
    contentScriptFile: data.url('inject.js') 
}); 

inject.js

var script = document.createElement('script'); 
script.src = "resource://directoryOfMyAddon/data/jquery/jquery-1.11.0.min.js"; 
document.getElementsByTagName('head')[0].appendChild(script); 

的test.html

<html> 
<head> 
</head> 
<body> 
<div id="helloworld"></div> 
<script type="text/javascript"> 
    $(document).ready(function(){ 
     $("#helloworld").text("Hello, world!"); 
    }); 
</script> 
</body> 
</html> 

由於O =)

回答

1

請參閱the docs for loading content scriptscontentScriptFile接受一個數組作爲參數,因此您可以附加多個腳本。

也就是說,出於安全原因,頁面腳本(如你的世界)和內容腳本不能共享變量。它可以被繞過,但我無法想象爲什麼會有HTML頁面上沒有注入jQuery本身的jQuery代碼。

+0

我試圖檢測URL像''並且用本地版。它被注入,但是體內的腳本未正確加載。 看看我如何阻止jquery,如果頁面上已經存在:https://stackoverflow.com/questions/23189622/firefox-addon-sdk-replace-request謝謝 – user3546897

+0

內容腳本和頁面腳本不能共享變量,所以注入你的JQuery版本不會使其可用於頁面,而僅適用於您的擴展的內容腳本。你爲什麼想這樣做? – willlma

+0

好的,謝謝,那麼您是否有任何可以繞過它的文檔?我想注入一個jquery的最新本地版本來增強隱私,速度,帶寬和減少錯誤。 – user3546897

3

您可以使用您所描述的技術注入了jQuery,但根據您的page-mod選項contentScriptWhen設置你不會看到.ready()爲內容腳本將只附着在後loadcontentScriptWhen="end"(默認))或DOMContentLoadedcontentScriptWhen="ready")。

您可以使用contentScriptWhen="start",但此時可能還沒有一個節點尚未添加<script>標籤。

但是,我應該提到它非常不鼓勵(閱讀:不會通過AMO審查)將jquery插入隨機頁面,因爲這可能會干擾可能已被頁面加載的jquery版本(或無論其他網站分配到$)。

相反,如果您的所有代碼都駐留在您的內容腳本中會更好。

+0

請參閱下面的評論;) – user3546897