2014-05-11 114 views
6

我有以下文件(gist爲方便):chrome.runtime.sendMessage內容腳本不發送消息

manifest.json的

{ 
    "name": "testmessage", 
    "version": "0.1", 
    "manifest_version": 2, 
    "externally_connectable": { 
    "matches": ["*://www.google.com/*"] 
    }, 
    "background": { 
    "scripts": ["background.js"], 
    "persistent": true 
    }, 
    "content_scripts": [ 
    { 
     "matches": ["*://www.google.com/*"], 
     "js": ["content.js"] 
    } 
    ] 
} 

content.js

chrome.runtime.sendMessage(
    "eldkfaboijfanbdjdkohlfpoffdiehnb", // PUT YOUR EXTENSION ID HERE 
    "foo", 
    function (response) { 
     console.log(response); 
    } 
); 
console.log("this is content.js reporting for duty"); 

background.js

chrome.runtime.onMessageExternal.addListener(
    function(request, sender, sendResponse) { 
     console.log("background.js got a message") 
     console.log(request); 
     console.log(sender); 
     sendResponse("bar"); 
    } 
); 
console.log("this is background.js reporting for duty"); 

我可以同時看到「......報到」,在各自的控制檯消息。但當加載http://www.google.com時,background.js未收到消息。第5行content.js在google.com的控制檯中打印undefined

當我在google.com控制檯中運行chrome.runtime.sendMessage("eldkfaboijfanbdjdkohlfpoffdiehnb", "foo");時,它顯示在background.js控制檯中。

我在做什麼錯?

回答

12

你做錯了什麼是過度複雜。兩次。

首先,您不需要聲明爲可外部連接,因爲您是從內容腳本發送消息而不是網頁本身。

其次,它也不是外部消息。外部消息用於連接不同的分機,而不是一個分機內的消息。

您的代碼應該是這樣的:

content.js

chrome.runtime.sendMessage(
    "foo", 
    function (response) { 
     console.log(response); 
    } 
); 

background.js

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) { 
     console.log("background.js got a message") 
     console.log(request); 
     console.log(sender); 
     sendResponse("bar"); 
    } 
); 
相關問題