2012-08-04 16 views
7

Quando si cerca di comunicare tra il mio script di Content e sfondo che ricevo i seguenti errori:Chrome Extension: errore porta: impossibile stabilire una connessione. La fine di ricezione non esiste.

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

e il mio 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"] 
    } 
    ] 
} 

ho trovato la soluzione per aggiungere un BACKGROUND_PAGE: "background.html" con una background.html vuoto, ma poiché BACKGROUND_PAGE non è supportato dal manifest_version: 2, non posso usare quella.

+0

Un altro modo, che risolvono il mio problema con esattamente lo stesso errore: http://stackoverflow.com/a/13565529/390747 – WooCaSh

risposta

20

sendMessage e onRequest sono non compatibile.

Se è necessario supportare Chrome 19 e versioni precedenti, utilizzare onRequest e sendRequest:

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

Per Chrome 20 - 25, utilizzare chrome.extension.onMessage e chrome.extension.sendMessage:

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

Per Chrome 26+, utilizzare chrome.runtime.onMessage e chrome.runtime.sendMessage.


Nota: A partire da Chrome 26, i metodi deprecati sono ancora supportati, anche se non documentati. Se hai la possibilità, aggiorna la tua estensione per utilizzare i nuovi metodi, per assicurarti che la tua estensione funzioni ancora in futuro.
Vedere this answer per codice per creare un dispositivo compatibile con Chrome 20+.

+2

+1 per aver segnalato l'errore nella documentazione .. !!! – Amila

3

Invece di

chrome.extension.onRequest.addListener(onRequest); 

Usa

chrome.extension.onMessage.addListener(onRequest); 

Dal momento che si sta utilizzando sendMessage e non sendRequest.

L'analisi dei messaggi è stata aggiornata nella nuova versione di Chrome. sendRequest e onRequest sono deprecati. Si consiglia di andare con sendMessage e onMessage.

Consultare i documenti per message parsing between Content Script and Background.

+1

Questo vale per Chrome 20-25. In Chrome 26 l'API è cambiata di nuovo. Vedi [risposta di Rob W a questa domanda] (http://stackoverflow.com/a/11811936/3345375) e [risposta di Peterthinking a una domanda simile] (http://stackoverflow.com/a/18131296/3345375) . – jkdev

Problemi correlati