2012-06-07 82 views
0

我使用下面的代碼來訪問谷歌瀏覽器的背景頁面功能背景頁面功能在谷歌瀏覽器不會觸發:

popup.html

function sendRequest(ea,eb) 
{ 
console.log("Inside"); 
chrome.extension.sendRequest({ea:ea,eb:eb}, 
     function(response) 
     { 
      alert(response.farewell); 

     });  
} 

background.html

<html> 
<body> 
<script> 
chrome.extension.onRequest.addListener(
    function(request, sender, sendResponse) { 
sendResponse({farewell: "goodbye"}); 
    }) 
</html> 
</body> 
</script> 

manifest.json

{ 
    "name": "My First Extension", 
    "version": "1.0", 
    "manifest_version": 2, 
    "background": { 
    "page": "background.html" 
    }, 
"content_scripts": [ 
    { 
     "matches": ["http://*/"], 

     "js": ["popup.js"] 
    } 
    ], 



    "description": "The first extension that I made.", 
    "browser_action": { 
    "default_icon": "icon.png", 
    "default_popup": "mine.html" 
    }, 
    "permissions": [ 
    "tabs","http://*/","background" 

    ], 
    "web_accessible_resources": ["loading.html","bu.png"] 


} 

但它不打印警報。誰能告訴我我在這裏做錯了什麼?

+0

你還有其他聽衆嗎?如果你有多個聽衆只有第一個發送迴應將被使用,其他人將被忽略 – Eduardo

+0

不。只有這一個 – user1092042

+0

你可以發佈你的manifest.json文件嗎? – Eduardo

回答

3

您的HTML for background.html格式錯誤,應該修復;

<html> 
<body> 
<script> 
    chrome.extension.onRequest.addListener(
    function(request, sender, sendResponse) { 
    sendResponse({farewell: "goodbye"}); 
    }) 
</script> 
</body> 
</html> 

標籤應該在他們是開放的,以保持一個正確的層次結構相反的順序關閉。由於您還沒有這樣做,因此<script>元素格式錯誤,並且包含無效的語法</html></body>,因此無法正確執行。由於您使用清單的version 2,您可能需要考慮將此腳本元素的內容(忽略所有HTML)抽象爲其自己的文件(例如background.js)並將您的清單更改爲以下內容;

{ 
    "name": "My First Extension", 
    "version": "1.0", 
    "manifest_version": 2, 
    "minimum_chrome_version": "18", 
    "background": { 
    "scripts": ["background.js"] 
    }, 
"content_scripts": [ 
    { 
     "matches": ["http://*/"], 

     "js": ["popup.js"] 
    } 
    ], 



    "description": "The first extension that I made.", 
    "browser_action": { 
    "default_icon": "icon.png", 
    "default_popup": "mine.html" 
    }, 
    "permissions": [ 
    "tabs","http://*/","background" 

    ], 
    "web_accessible_resources": ["loading.html","bu.png"] 


} 

注意,現在background property包含表示JavaScript文件的字符串數組被加載(在指定的順序)中,以動態生成的背景信息頁面。

我也已將minimum_chrome_version屬性設置爲18,因爲清單版本2只應在針對此版本的Chrome及更高版本時使用。

當開發人員需要支持舊版Chrome時,現在只需要使用後臺頁面而不是腳本。

編輯

它只是點擊你正在嘗試將背景頁中執行嵌入的JavaScript。清單版本2引入了Content Security Policies,它禁止執行內聯(例如onclick="showDialog();"href="javascript:void(0);")和嵌入式JavaScript。這就是爲什麼你的background.html不會工作,爲什麼background.js會。您還需要確保您的popup.html不包含任何嵌入式JavaScript。最好的解決方法(無論如何都是最佳實踐)是將所有JavaScript抽象爲其自己的文件(例如popup.js),該文件由HTML文件引用。例如;

<script src="/popup.js"></script> 
+0

我在html中解決了錯誤並糾正了錯誤,但仍然無法正常工作。我不知道我做錯了什麼。 – user1092042

+0

您可以嘗試更改[匹配模式](http://code.google.com/chrome/extensions/match_patterns。你在清單中使用'http:// * /'到'http:// */*',因爲這可能是問題。這將需要在'content_scripts'和'permissions'屬性中更改。我可以假設popup.html中的代碼被封裝在'

相關問題