2012-09-19 15 views
7

Lo script di contenuto invia un messaggio a background.js. Nel gestore di callback per la risposta, ho avuto l'ultima riga come "alert(alrt_msg)". Al momento l'esecuzione di codice, ho la finestra di avviso, ma dopo aver fatto clic su "OK", il display della console cromata seguente in rosso:Errore lancio di estensione di Chrome nella console

Error in event handler for 'undefined': Cannot call method 'disconnect' of null TypeError: Cannot call method 'disconnect' of null 
    at chromeHidden.Port.sendMessageImpl (miscellaneous_bindings:285:14) 
    at chrome.Event.dispatch (event_bindings:237:41) 
    at Object.chromeHidden.Port.dispatchOnMessage (miscellaneous_bindings:250:22) 

La sua non è molto informativo, ma intuitivamente sapevo che questo errore è dovuto al fatto qualche struttura da qualche parte è spazzatura raccolto mentre l'utente fa clic su "OK". Così ho messo il mio codice come

window.setTimeout(function() { alert(alrt_msg); } , 1);

Questo ha reso il lavoro senza errori sopra. Tuttavia, dopo aver cercato documentazione o google, non sono stato in grado di trovare la ragione esatta alla base di questo. Qualcuno può spiegare cosa sta succedendo e se la documentazione contiene un modo specifico per farlo?

+0

Qual è il tuo codice? Cosa succede se si inserisce 'return true;' alla fine del listener di eventi 'onMessage'? –

+3

Credo che il motivo sia che il gestore della risposta del messaggio non aspetta che l'avviso venga cliccato; così quando chiudi l'avviso per consentire allo script di continuare, il gestore non è più lì. Non sono sicuro se questo potrebbe essere considerato un bug. – Goodwine

+0

@ Goodwine, credo che tu abbia ragione. – Methos

risposta

2

Sono giunto allo stesso problema. Ciò è dovuto a un errore (errore del mio codice) in una funzione chiamata nel gestore di risposta.

Ecco il mio codice:

In background.js - il lato di ascolto

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) { 
    var update_msg = 'test'; 
    sendResponse({data: update_msg}); 
    return false; // -> Add this or not add this do not matter 
    }); 
} 

Sul lato di invio:

function updateObjDatabase(obj) { 
    chrome.runtime.sendMessage({data: obj}, function(response) { 
    // Update when it's done 
    update_msg_handler(response.data); 
    }); 
} 

function update_msg_handler(msg) { 
    ..... error code here 
} 

il codice errato è in realtà nella funzione update_msg_handler. Ma la console Chrome non ti dirà che dettagli. È necessario aggiungere alcuni console.log per eseguire il debug se non si dispone di un IDE.

+0

Avevo più o meno lo stesso problema. Quindi sì, controlla il tuo codice per errori ragazzi –

+11

In realtà non hai spiegato nulla qui. Cosa nel tuo codice ha generato questo errore? –

1

Ho avuto lo stesso errore. Era l'app iMacros. Dopo che l'ho cancellato, nessun errore.

Problemi correlati