2012-08-04 14 views
7

Gdy próbuje komunikować się między moim Script Content i tła uzyskać następujące błędy:Rozszerzenie Chrome: błąd portu: nie można nawiązać połączenia. Odbieranie końca nie istnieje.

Port error: Could not establish connection. Receiving end does not exist. 
Error in event handler for 'undefined': Cannot read property 'message' of undefined  
TypeError: Cannot read property 'message' of undefined 

background.js

function onRequest(request, sender, callbackFunction) { 
    console.log("Me (BS) became this Message:" + request.message); 
    sendResponse({message: request.message}) 
}; 
chrome.extension.onRequest.addListener(onRequest); 

streamcloud.js

function contactBackground(nachricht){ 
    chrome.extension.sendMessage({message: nachricht}, function(response) { 
     console.log("The Background Script got the following Message: " + response.message); 
    }); 
} 

i mój plik manifest.jso n

{ 
    "name": "InstantWatch - Dev", 
    "manifest_version": 2, 
    "version": "0.7", 
    "permissions": ["tabs", "http://*/", "https://*/"], 
    "background": { 
    "scripts": ["background.js"] 
    }, 
    "browser_action": { 
    "default_title": "InstantWatch", 
    "default_icon" : "icon.ico" 
    }, 
    "content_scripts": [ 
    { 
     "matches": ["http://*/*", "http://*/*"], 
     "js": ["jquery.js", "streamcloud.js"] 
    } 
    ] 
} 

mogę znaleźć rozwiązanie dodać BACKGROUND_PAGE: „background.html” pustym background.html, ale ponieważ nie jest obsługiwany BACKGROUND_PAGE od manifest_version 2, nie można jej użyć.

+0

Innym sposobem, który rozwiąże mój problem z dokładnie tego samego błędu: http://stackoverflow.com/a/13565529/390747 – WooCaSh

Odpowiedz

20

sendMessage i są niezgodne.

Jeśli trzeba wspierać Chrome 19 i wcześniejszych, użyj onRequest i sendRequest:

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) { 
    // Warning: Chrome 19- [receiver] 
}); 
chrome.extension.sendRequest(message, optional_sendResponse); 

Dla Chrome 20 - 25, użyj chrome.extension.onMessage i chrome.extension.sendMessage:

chrome.extension.onMessage.addListener(function(request, sender, sendResponse) { 
    // Chrome 20+ 
}); 
chrome.extension.sendMessage(message, optional_sendResponse); 

Dla Chrome 26+, użyj chrome.runtime.onMessage i chrome.runtime.sendMessage.


Uwaga: od wersji Chrome 26 przestarzałe metody są nadal obsługiwane, ale nieudokumentowane. Jeśli masz szansę, zaktualizuj rozszerzenie, aby korzystać z nowych metod, aby upewnić się, że rozszerzenie będzie nadal działać w przyszłości.
Wyświetl kod this answer, który jest zgodny z Chrome 20+.

+2

+1 za wskazanie błędu w dokumentacji .. !!! – Amila

3

Zamiast

chrome.extension.onRequest.addListener(onRequest); 

Zastosowanie

chrome.extension.onMessage.addListener(onRequest); 

Ponieważ używasz SendMessage i nie sendRequest.

Analiza wiadomości została zaktualizowana w nowej wersji Chrome. sendRequest i onRequest są przestarzałe. Zaleca się korzystanie z funkcji sendMessage i onMessage.

Odwołaj się do dokumentacji dla message parsing between Content Script and Background.

+1

Dotyczy to Chrome 20-25. W Chrome 26 interfejs API znowu się zmienił. Zobacz odpowiedź [Rob W na to pytanie] (http://stackoverflow.com/a/11811936/3345375) oraz [odpowiedź peter na podobne pytanie] (http://stackoverflow.com/a/18131296/3345375) . – jkdev

Powiązane problemy