javascript: hören Sie für postMessage Ereignisse von bestimmten iframe
Habe ich mehrere iframes in einer Seite. Jetzt habe ich ein message
Ereignis-listener für die Seite, die bekommt die Meldungen für alle iframes. Ich habe einen workaround zu wissen, von dem iframe die Botschaft kommt.
Ich mag würde, um Ereignis-Listener für jede iframe getrennt. Ist das möglich?
- Denke nicht, dass das möglich ist. Die Fenster erhalten können
message
Veranstaltungen von überall aus. Wenn Sie eine Problemumgehung, das ist wohl ok. - Nur aus Neugier, wie hast du deine Lösung?
InformationsquelleAutor forresto | 2013-04-28
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, es ist nicht möglich. Am besten Sie tun können, ist, einen einzigen handler, Routen empfangenen Nachrichten zu Helfer-Handler basiert auf der Herkunft der Absender der Nachricht.
Müssen Sie hören auf die Globale
message
Veranstaltung derwindow
Objekt, aber Sie können filter der iframe-Quelle verwenden dieQuellcode
Eigenschaft vonMessageEvent
.Beispiel:
Wenn die
src
Attribut jedes iframe ist einzigartig, dann können Sie versuchen, diese:Auf das Kind:
Auf die Eltern:
Das Kind schickt, es ist die Höhe und die URL für den iframe parent mit
postMessage()
. Die Eltern wartet dann auf das Ereignis, schnappt sich der iframe mit URL und legt die Höhe, um es.Tatsächlich können Sie. Fügen Sie eine einzigartige name-Attribut für jedes iframe. iframe name ist überliefert die contentWindow. So innerhalb von iframe-Fenster.name ist der name des iFrames, und Sie können ganz einfach senden Sie es in der post-Nachricht.
Könnten Sie
e.originalEvent.origin
zu identifizieren, die den iframe.Auf die iframe-Kind:
Auf die iframe parent:
Javascript
jQuery
So
origin
enthält das Protokoll und die Domäne, aus der diepostMessage()
wurde entlassen. Es beinhaltet nicht die URI. Diese Technik übernehmen alle iframes haben eine eigene domain.e.originalEvent.origin
Gegenzug eine url als Ergebnis wird eine serialisierte string? Ich bin nicht allzu vertraut mit jQuery und ganzen finde ich, dass es gibt bestimmte Eigenschaften in einem objectEvent, dass war alles für die Bequemlichkeit von jQuery. Soorigin
eigentlich eine Veranstaltunglocation.protocol + location.hostname
?Einer Weise, die erkennen, wo die Nachricht kam, ist mit der überprüfung des iframe ausgerichtet ist oder für mein spezielles Szenario, das iframe sichtbar ist.