2012-03-06 48 views
0

我正在構建我的第一個擴展,並且在獲取內容腳本中的後臺頁面加載腳本時遇到問題,這會帶來如果在後臺頁面上加載的任何腳本真的可用於所有內容腳本的疑慮。爲什麼不能使用內容腳本使用加載在背景頁面上的jQuery?

我有兩個javascript文件,functions.jscontent.js,它們都使用jQuery。我在後臺頁面加載jQuery和函數腳本,以減少每個站點匹配的解析。一次就夠了,因爲它們都是功能。

manifest.json的非工作

{ 
    "name": "extension name", 
    "background_page": "background.html", 
    "content_scripts": [ { 
    "js": [ "js/functions.js", "js/content.js" ], 
    "matches": [ "http://*.mysite.com/*" ], 
    "exclude_globs": [ "*board*" ], 
    } ], 
    "version": "0.1" 
} 

注意:使用 「include_globs」 加載CDN不工作的jQuery的。仿真@include是一個失敗,所以我不得不包含帶有擴展名的jQuery。

manifest.json的工作

{ 
    "name": "extension name", 
    "background_page": "background.html", 
    "content_scripts": [ { 
    "js": [ "js/jquery-1.7.1.min.js", "js/functions.js", "js/content.js" ], 
    "matches": [ "http://*.mysite.com/*" ], 
    "exclude_globs": [ "*board*" ], 
    } ], 
    "version": "0.1" 
} 

注:這裏我刪除後臺頁面加載jQuery的。

background.html

<html> 
    <head> 
     <script src="js/jquery-1.7.1.min.js"></script> 
     <script src="js/functions.js"></script> 
    </head> 
</html> 

content.js

console.log('testing console'); // this works 
alert('testing native JS'); // this works 
$('<div id="myTestingDiv" />').prependTo('body'); // this fails 

回答

3

背景的網頁,彈出的頁面和內容腳本在不同範圍文件都跑。

在後臺頁面中定義的任何變量和腳本都不能在內容腳本中直接訪問,反之亦然。
另一方面,Injected Content腳本可以相互交互。

可以使用獲得全球(window)對象:

+0

+1。具體來說,請參閱ContentScripts文檔中的[獨立世界討論](http://code.google.com/chrome/extensions/content_scripts.html#execution-environment),以獲取有關這些工作原理的詳細信息。 – 2012-03-06 16:11:31

+0

要在網頁範圍內執行代碼,請參閱[本答案](http://stackoverflow.com/a/8994454/938089?how-to-disable-facebook-hotkeys-with-chrome-extension)。有關在注入代碼中添加方法以支持'chrome。*'方法的演示,請參見[** this diff **]的底部綠色塊(http://userscripts.org/scripts/diff/112070/440352 )。 – 2012-03-06 16:23:50

相關問題