2010-06-16 13 views
17

¿Hay alguna buena herramienta que permita a los desarrolladores depurar correctamente los mensajes enviados entre ventanas con postMessage?Cualquier buen depurador para HTML5 Javascript postMessage API?

O tal vez un plugin para Firebug?

+1

¿Qué hay que depurar? Siempre que el código de envío y recepción sea correcto, entonces funciona. Si no, entonces eso es lo que necesita para depurar –

+0

De hecho. Yo diría que solo revisa el valor de las variables que estás enviando. Por ejemplo, en el ejemplo vinculado, observe el valor de 'myMessage.value' o' evt.data'. –

+3

Bueno, para ser justos, podría ser bueno si (por ejemplo) Firebug pudiera mostrarle mensajes publicados en un marco en particular, independientemente de qué código de controlador exista, de forma similar a como muestra los detalles de XMLHttpRequest. – Pointy

Respuesta

16

Firebug (as of 1.11 beta 1) admite esto con monitorEvents(). Se puede hacer algo como esto:

$("iframe").each(function(i, e) { 
    console.log("Monitoring messages sent to: iframe(" + i + ")#" + $(this).attr("id")); 
    monitorEvents(this.contentWindow, "message"); 

    // Send a test message to this iframe 
    this.contentWindow.postMessage("Hi iframe - " + i, "*"); 
}); 

console.log("Monitoring messages sent to window"); 
monitorEvents(window, "message"); 
// Send a test message to the window 
window.postMessage("Hi window", "*"); 

(@Pierre: gracias por mencionar que feature request)

EDIT:Also works in Chrome, aunque cuando probé el código anterior me encontré con un error de seguridad que los valores document.domain no eran lo mismo, por lo que el comportamiento de estas dos implementaciones puede ser ligeramente diferente.

ACTUALIZACIÓN: Tengo submitted a feature request al equipo de Chrome pidiendo que los eventos postMessage aparezcan en la línea de tiempo. Además, encontré un extension called JScript Tricks que puede inyectar código JavaScript arbitrario en una página cuando se carga. Puede agregar el siguiente código para monitorear eventos una vez que la página se carga. Funciona bastante bien, aunque puede perder eventos que ocurren inmediatamente (por ejemplo, antes de la carga, si eso es posible).

(function($) { 
    var $window = $(window); 
    $window.add("iframe").on("message", function(e) { 
     console.log("Received messsage from " + e.originalEvent.origin + ", data = " + e.originalEvent.data); 
    }); 
})(jQuery); 
+1

¿Alguna actualización sobre esto en 2016? No estoy seguro de que todavía exista firebug –

+1

Firebug definitivamente todavía existe (https://addons.mozilla.org/en-US/firefox/addon/firebug/) pero no he tenido que depurar 'postMessage' en mucho tiempo , así que no he revisado esta respuesta recientemente. Si encuentra algo roto o tiene una mejor solución, por favor comparta. – iX3

0

Se ha emitido un firebug feature-request.

+1

Gracias @ iX3 por la sugerencia: ahora compatible con Firebug (a partir de 1.11 beta 1). –

Cuestiones relacionadas