2012-08-04 18 views
7

al tratar de comunicarse entre mi escritura Content y antecedentes que obtienen los siguientes errores:Extensión de Chrome: Error de puerto: no se pudo establecer la conexión. El extremo receptor no existe.

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

y mi 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"] 
    } 
    ] 
} 

he encontrado la solución para añadir un BACKGROUND_PAGE: "background.html" con un background.html vacío, pero desde BACKGROUND_PAGE no está soportado desde manifest_version: 2, no puede utilizar que.

+0

Otra forma, que resolver mi problema con exactamente el mismo error: http://stackoverflow.com/a/13565529/390747 – WooCaSh

Respuesta

20

sendMessage y onRequest son no compatible.

Si necesita apoyar Chrome 19 y versiones anteriores, utilice onRequest y sendRequest:

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

Para Chrome 20 - 25, utilice chrome.extension.onMessage y chrome.extension.sendMessage:

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

Para Chrome 26+, utilice chrome.runtime.onMessage y chrome.runtime.sendMessage.


Nota: A partir de Chrome 26, los métodos en desuso siguen siendo compatibles, aunque no documentados. Si tienes la oportunidad, actualiza tu extensión para usar los nuevos métodos, para asegurarte de que tu extensión funcionará en el futuro.
Consulte this answer para obtener un código para crear uno que sea compatible con Chrome 20+.

+2

+1 para señalar el error en la documentación ... !!! – Amila

3

En lugar de

chrome.extension.onRequest.addListener(onRequest); 

Uso

chrome.extension.onMessage.addListener(onRequest); 

dado que está utilizando sendMessage y no sendRequest.

El análisis de mensajes se ha actualizado en la nueva versión de Chrome. sendRequest y onRequest están en desuso. Se recomienda ir con sendMessage y onMessage.

Consulte los documentos para message parsing between Content Script and Background.

+1

Esto se aplica a Chrome 20-25. En Chrome 26, la API cambió, nuevamente. Ver [la respuesta de Rob W a esta pregunta] (http://stackoverflow.com/a/11811936/3345375) así como [la respuesta de peterthinking a una pregunta similar] (http://stackoverflow.com/a/18131296/3345375) . – jkdev

Cuestiones relacionadas