Ich habe mehrere iframes auf einer Seite. Jetzt habe ich einen message
-Ereignis-Listener für die Seite, der die Nachrichten von allen iFrames bekommt. Ich habe einen Workaround, um zu wissen, von welchem iframe die Nachricht kommt.
Ich möchte Event-Listener für jeden Iframe separat machen. Ist das möglich?
Nein, das ist nicht möglich. Am besten können Sie einen einzelnen Handler verwenden, der empfangene Nachrichten basierend auf dem Ursprung des Nachrichtenabsenders an Helper-Handler weiterleitet.
Wenn das Attribut src
jedes Iframes eindeutig ist, können Sie Folgendes versuchen:
Am Kind:
%Vor%Auf dem Eltern:
%Vor% Das Kind sendet seine Höhe und URL mit postMessage()
an den Iframe-Elternteil. Das übergeordnete Element wartet dann auf dieses Ereignis, greift den iframe mit dieser URL und legt die Höhe fest.
Sie könnten e.originalEvent.origin
verwenden, um den iframe zu identifizieren.
Auf dem iframe-Kind:
%Vor%Auf dem iframe-Elternteil:
Javascript
%Vor%jQuery
%Vor% So origin
enthält das Protokoll und die Domäne, von der postMessage()
abgefeuert wurde. Es enthält den URI nicht. Bei dieser Technik wird davon ausgegangen, dass alle Iframes eine eindeutige Domäne haben.
Eine Art zu erkennen, woher die Nachricht kam, ist zu überprüfen, welcher iFrame fokussiert ist oder für welches Szenario iFrame sichtbar ist.
Eigentlich kannst du. Fügen Sie jedem Iframe ein eindeutiges Namensattribut hinzu. Der iframe-Name wird an das contentWindow übergeben. Also innerhalb von iframe window.name ist der Name des iframe und Sie können es einfach in Post-Nachricht senden.
Sie müssen das globale message
-Ereignis des window
-Objekts abhören, aber Sie können den Quell-iFrame mit dem source
Eigenschaft von MessageEvent
.
Beispiel:
%Vor%Tags und Links javascript html5 iframe postmessage