2013-04-08 17 views
9

Ho appena aggiornato la mia estensione Chrome per JSON versione 2, e sto cercando di ottenere la mia estensione a lavorare di nuovo. Il problema è sendRequest è stato ammortizzato lungo la strada. Quindi copio il codice da https://developer.chrome.com/extensions/messaging.html nel mio script e lo modifico con i miei nomi di variabili personali, e non funziona.errore Chrome Extension sendMessage dallo script contenuti a sfondo html

Quindi quindi torno indietro e inserisco il codice originale e ancora non funziona. Ho letto più domande simili [e si spera che questo non venga chiuso come duplicato, perché nessuno di loro era uguale alla mia situazione].

manifest.json:

{ 
    "background": { 
     "page": "background.html" 
     }, 
    ... ... ... 
    "content_scripts": [ { 
     "css": [ "style.css" ], 
     "js": [ "jq.js", "script.js" ], 
     "matches": [ "http://*.craigslist.org/*/*.htm*" ] 
    } ], 
    ... ... ... 
    "permissions": [ "tabs", "http://*.craigslist.org/*/*.htm*" ], 
    "manifest_version": 2, 
    "update_url": "http://clients2.google.com/service/update2/crx", 
    "version": "3.0" 
} 

background.html:

<html> 
<script type='text/javascript'> 
    chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) { 
    console.log(sender.tab ? 
       "from a content script:" + sender.tab.url : 
       "from the extension"); 
    if (request.greeting == "hello") 
     sendResponse({farewell: "goodbye"}); 
    }); 
    }); 
</script> 
</html> 

script.js:

chrome.runtime.sendMessage({greeting: "hello"}, function(response) { 
    console.log(response.farewell); 
}); 

Ora ru na pagina [su Craigslist], e andare alla console, e questo è l'errore:

Port error: Could not establish connection. Receiving end does not exist. 
TypeError: Cannot read property 'farewell' of undefined 
    at chrome-extension://dhmjefbokfkjpdbigkadjpgjeflchgea/script.js:9:23 

Io uso Chrome Beta su Ubuntu 12.10 a 64 bit (Google Chrome: 27.0.1453.15 (Build ufficiale 191758) beta)

+0

È necessario spostare il codice inline in un file esterno. Questa domanda è stata posta prima e viene fornita una risposta dettagliata. –

+0

possibile duplicato di [errore Port durante la modifica estensione Chrome da v1 manifesto a v2] (http://stackoverflow.com/questions/11913575/port-error-while-changing-chrome-extension-from-manifest-v1-to- v2) –

risposta

30

si inviano messaggi sia lo sfondo e lo script contenuto, ma non cercare di riceverli affatto. Prova ad ascoltare i messaggi in uno o entrambi questi luoghi. Inoltre, il codice inline è against the CSP quindi spostalo tutto su un file esterno.

Ad esempio:

manifest.json

"background": { 
    "scripts": ["background.js"] 
}, 

background.js

chrome.runtime.onMessage.addListener(function(message,sender,sendResponse){ 
    sendResponse({farewell:"goodbye"}); 
}); 

script.js

chrome.runtime.sendMessage({greeting: "hello"}, function(response) { 
    console.log(response.farewell); 
}); 

Inoltre, chrome.tabs.getSelected() è stato deprecato, quindi utilizzare chrome.tabs.query().

+0

Ok ho appena modificato il mio codice in entrambi i background.html e script.js, ma ho ancora l'errore! – Matt

+0

Stavo uscendo dal codice di Google. lol. Mi sono collegato direttamente ad esso. Comunque no, lasciami provare ... a pensarci due volte non sono nemmeno sicuro di come fare uno sfondo JS. A meno che non intenda contenuto-script. L'ho già Il problema, gli script di contenuto non possono accedere a localStorage, quindi utilizzando HTML in background per accedere a localStorage e inviarlo attraverso un messaggio. – Matt

+0

Ohh .. ok ci proverò. – Matt

0

sceneggiatura sfondo

chrome.tabs.getAllInWindow(null, function(tabs) { 
     $.each(tabs, function() { 
     chrome.tabs.sendRequest(this.id, {"action":"action_name"}); 
     }); 
    }); 

la trascrizione dei contenuti

chrome.extension.onRequest.addListener(function(request, sender, sendResponse){ 
    if(request.action === 'action_name') 
    { 
    alert('handle event in the content script!!!!') 
    } 
}); 
+0

Errore in risposta a tabs.getAllInWindow: Errore: valore non valido per argomento 1. Il valore non deve essere inferiore a 0. –

+0

@Olek, il tuo codice invia msg da bg a contentcript invece di viceversa – Pacerier

Problemi correlati