2014-05-11 15 views
6

mam następujące pliki (gist dla łatwego dostępu)chrome.runtime.sendMessage w skrypcie zawartości nie wysyła wiadomość

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"); 

widzę zarówno ... „zgłoszenie do służby” wiadomości w poszczególnych konsolach. Ale background.js nie otrzymuje wiadomości po załadowaniu http://www.google.com. Linia 5 w content.js drukuje undefined w konsoli witryny google.com.

Po uruchomieniu chrome.runtime.sendMessage("eldkfaboijfanbdjdkohlfpoffdiehnb", "foo"); w konsoli google.com pojawia się w konsoli background.js.

Co robię źle?

Odpowiedz

12

To, co robisz źle, jest zbyt skomplikowane. Dwa razy.

Po pierwsze, nie musisz zadeklarować, że można się z nimi połączyć zewnętrznie, ponieważ wysyłasz wiadomość ze skryptu treści, a nie z samej strony.

Po drugie, nie jest to również wiadomość zewnętrzna. Wiadomości zewnętrzne służą do łączenia różnych rozszerzeń, a nie wiadomości w jednym rozszerzeniu.

Kod powinien wyglądać następująco:

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"); 
    } 
); 
Powiązane problemy