2012-12-30 12 views
5

Sto sperimentando con l'API chrome.extension.Il listener di Chrome onMessage non viene chiamato

manifest.json

{ 
    "name": "First", 
    "version": "1.0", 
    "manifest_version": 2, 
    "description": "First extension", 
    "background": { 
     "scripts": ["test.js"] 
    },  
    "page_action": { 
     "default_icon": "icon.png", 
     "default_popup": "popup.html" 
    },  
    "content_scripts": [ { 
     "js": [ "jquery.min.js", "display.js" ], 
     "matches": [ "http://*/*", "https://*/*" ]  
    } ], 

    "permissions" : [ 
     "tabs", 
    "http://*/*", "https://*/" 
     ] 
} 

display.js

alert("inside display.js"); 

chrome.extension.onMessage.addListener(
     function(request, sender, sendResponse){ 
      alert("inside msg"); 
      var time = request.sel_text; 
      alert(time); 

     }); 

test.js

function check(tab_id, data, tab){ 
    if(tab.url.indexOf("google") > -1){ 
     chrome.pageAction.show(tab_id); 
     chrome.tabs.executeScript(null, {"file" : "display.js"}) ; 
    } 
}; 
chrome.tabs.onUpdated.addListener(check); 

popup1.js

function myfunc(){ 

    var x = $('#options option:selected').text(); 
    alert(x); 
    chrome.extension.sendMessage({sel_text: x}); 

} 

$(document).ready(function(){ 
    $('#options').change(myfunc); 

}); 

Ora, quando i miei caricamento della pagina ottengo three(3) popup dicendo inside display.js ma chrome.extension.onMessage.addListener non viene mai chiamato.

Quindi, cosa sto facendo di sbagliato. Possiamo accedere all'API chrome.extension.* dallo script di contenuto.

risposta

6

chrome.extension.sendMessage innesca solo onMessage ascoltatori nel campo di applicazione della estensione, esclusi script contenuti.

Si può avvisare gli script di contenuti utilizzando il metodo chrome.tabs.sendMessage, come segue:

function myfunc() { 
    var x = $('#options option:selected').text(); 
    var message = {sel_text: x}; 
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { 
     var tabId = tabs[0].id; 
     chrome.tabs.sendMessage(tabId, message); 
    }); 
} 
+0

Grazie a questo ha funzionato.Puoi fornirmi la documentazione in cui è affermato che' chrome.extension.sendMessage' non si innesca per lo script di contenuto perché sto creando un'API altamente confusa per il cromo. – RanRag

+0

" Si noti che le estensioni non possono inviare messaggi agli script di contenuto utilizzando questo metodo.Per inviare messaggi agli script di contenuto, utilizzare chrome.tabs.sendMessage(). "- documenti per [' chrome.extension.sendMessage'] (http://developer.chrome.com/extensions/extension.html#method-sendMessage) (ed esperienza) –

+0

(commento precedente annullato) Sì. Ho letto erroneamente i documenti e ho capito il mio problema. –

0

chrome.extension.sendMessage({sel_text: x}); che è in popup1.js non utilizzato o referenziato nel file manifest. Dove stai usando popup1.js nella tua estensione?

chrome.extension.onMessage.addListener viene generato quando un messaggio viene inviato da un processo di estensione o da uno script di contenuto, non è stato inviato alcun messaggio nel codice !.

Inoltre, perché si desidera re-iniettare lo script chrome.tabs.executeScript(null, {"file" : "display.js"}) ; da background page mentre è già registrato con manifest file.

+0

'popup1.js' viene utilizzato in' popup.html' [file] (http://sprunge.us/ITDJ) . Sto usando 'sendMessage' in popup1.js quindi credo di inviare un messaggio. – RanRag

+0

@Noob: il messaggio viene inviato solo quando si fa clic su "icona di azione del browser" o si attiva 'popup.html', l'hai provato? – Sudarshan

+0

Se inserisco il codice 'display.js' dentro' test.js', funziona bene. – RanRag

Problemi correlati