2012-09-19 7 views
7

Mi secuencia de comandos de contenido envía un mensaje a background.js. En el controlador de devolución de llamada para la respuesta, tenía la última línea como "alert(alrt_msg)". Tras la ejecución de código, aparece el cuadro de alerta, pero después de hacer clic en "Aceptar", los espectáculos de la consola de cromo siguientes en rojo:Error de lanzamiento de la extensión de Chrome en la consola

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) 

No es mucho más informativo, pero intuitivamente sabía que este error se debe a algún tipo de estructura alguna parte es basura recopilado mientras el usuario hace clic en "Aceptar". Así que puse mi código como

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

Esto hizo que funcione sin error anterior. Aún así, después de buscar documentación o google, no pude encontrar la razón exacta detrás de esto. ¿Puede alguien explicar qué está pasando y si la documentación contiene una forma específica de hacerlo?

+0

¿Cuál es su código? ¿Qué sucede si inserta 'return true;' al final de su detector de eventos 'onMessage'? –

+3

Creo que la razón es que el controlador para la respuesta del mensaje no espera a que se haga clic en la alerta; así que cuando cierra la alerta para permitir que la secuencia de comandos continúe, el controlador ya no está allí. No estoy seguro de si esto podría considerarse un error. – Goodwine

+0

@Goodwine, creo que tienes razón. – Methos

Respuesta

2

He llegado al mismo problema. Esto se debe a un error (el error de mi código) en una función que se llama en el controlador de respuesta.

Aquí está mi código:

En background.js - el lado de escucha

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

En el lado emisor:

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 
} 

El código erróneo es en realidad en la función update_msg_handler. Pero la consola de Chrome simplemente no le dirá esos detalles. Tienes que agregar algo de console.log para depurar si no tienes un IDE.

+0

Tuve más o menos el mismo problema. Así que sí, revisa tu código para ver los errores chicos –

+11

No explicaste nada aquí. ¿Qué en su código lleva a este error? –

1

Tuve el mismo error. Fue la aplicación iMacros. Después de eliminarlo, no hay ningún error.

Cuestiones relacionadas