2010-06-16 12 views
17

Czy jest jakieś dobre narzędzie, które pozwala programistom poprawnie debugować wiadomości wysyłane między oknami z postMessage?Jakiś dobry debugger dla API HTML postMessage HTML5?

A może wtyczka do Firebug?

+1

Co jest do debugowania? Dopóki kod wysyłania i odbierania jest poprawny, działa. Jeśli nie, to jest to, czego potrzebujesz do debugowania –

+0

Rzeczywiście. Powiedziałbym, po prostu sprawdź wartość wysyłanych zmiennych. Np. W połączonym przykładzie spójrz na wartość 'myMessage.value' lub' evt.data'. –

+3

Cóż, uczciwie byłoby miło, gdyby Firebug pokazał wiadomości wysłane do konkretnej ramki, niezależnie od tego, jaki kod obsługi istnieje, podobnie jak pokazuje szczegóły XMLHttpRequest. – Pointy

Odpowiedz

16

Firebug (as of 1.11 beta 1) obsługuje to z monitorEvents(). Można zrobić coś takiego:

$("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: dzięki za wspomnieć, że feature request)

EDIT:Also works in Chrome, ale kiedy próbowałem powyższy kod I wystąpił błąd zabezpieczeń wartości document.domain nie były takie same, więc zachowanie tych dwóch implementacji może być nieco inne.

AKTUALIZACJA: Mam submitted a feature request do zespołu Chrome z pytaniem, czy zdarzenia postMessage pojawiają się na osi czasu. Ponadto znalazłem extension called JScript Tricks, który może wstrzyknąć dowolny kod JavaScript do strony po wczytaniu. Możesz dodać do niego następujący kod, aby monitorować zdarzenia po załadowaniu strony. Działa całkiem nieźle, chociaż może spowodować nieoczekiwane zdarzenia, które wystąpią natychmiast (na przykład przed przeładowaniem, jeśli to możliwe).

(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

Wszelkie aktualizacje na ten temat w 2016 roku? Nie jestem pewien, czy firebug wciąż istnieje. –

+1

Firebug zdecydowanie istnieje (https://addons.mozilla.org/en-US/firefox/addon/firebug/), ale nie musiałem debugować 'postMessage' przez długi czas , więc ostatnio nie sprawdzałem tej odpowiedzi. Jeśli znajdziesz coś uszkodzonego lub masz lepsze rozwiązanie, udostępnij je. – iX3

0

Został wydany firebug feature-request.

+1

Dzięki @ iX3 za podpowiedź: teraz obsługiwane przez Firebug (od wersji 1.11 beta 1). –

Powiązane problemy