PostMessage noch auf IE11 gebrochen?
Scheint es, dass Fenster.postMessage ist immer noch kaputt auf IE 11, wenn die Nachricht
- zwischen einem Fenster und einem Kind popup/tab mit Fenster.öffnen
- , wenn es gesendet wird, von anderen Domänen [oder der gleichen Domäne, in einigen Fällen c.f. update 16/01]
Gab es ähnliche Probleme mit dem IE 8/9/10, aber diese Funktion war gekennzeichnet als 'unterstützt' im IE 11 von "teilweise unterstützt" im IE 10
Es ist ein Beispiel für den code, funktioniert auf chrome/ff aber nicht IE:
Den opener (jsfiddle):
$(document).ready(function() {
$('#log').append('listening...');
window.addEventListener("message", function(e){
$('#log').append("Received message: " + JSON.stringify(e.data));
}, false);
$('button').click(function() {
window.open('http://jsbin.com/eQeSeros/1', 'popup','menubar=no, status=no, scrollbars=no, menubar=no, width=200, height=100');
});
});
Den Kind popup (jsbin): (wird nicht funktionieren, wenn nicht, öffnen von jsfiddle)
$(document).ready(function() {
$('body').append('sending...');
window.opener.postMessage("Hello?", "http://fiddle.jshell.net");
$('body').append('sent...');
});
Lese ich aus dem post Ist cross-origin-postMessage gebrochen in IE10?, die wir verwenden können, eine MessageChannel
statt postMessage
, aber das Lesen der doc, habe ich nicht herausfinden können, wie es in meinem realen Fall, weil Sie zu Durchlaufen haben, der Anschluss an das untergeordnete Fenster.
Es ist ein redirect-Kette, bevor ich Sie senden müssen, dass meine Botschaft, so dass selbst wenn ich könnte senden Sie einen port, ich werde verlieren js-Objekt gesendet anfangs/vor der leitet.
Jede Idee für einen Ersatz ?
Update 14/01: ich m denken über die Weitergabe meiner Daten in das Fenster/tab-Titel und regelmäßig überprüfen, zu diesem Titel von den Eltern... aber dies wäre ziemlich schmutzigen trick.
Update 16/01: Das wirklich schlimme ist, dass es nicht zu brechen, auch wenn die Nachricht senden, die aus der gleichen Domäne, aber nach der Weiterleitung von einer anderen domain.
hier ist das Beispiel:
http://jsfiddle.net/L4YzG/13/ öffnet das popup -http://jsbin.com/eQeSeros/4/edit, dass Umleitungen zu http://jsfiddle.net/mxS8Q/2/ (das posten der Nachricht)
Wenn Sie ändern Sie den url-popup direkt durch die abschließende url-Umleitungen zu http://jsfiddle.net/mxS8Q/2/show dies funktioniert auf IE, weil es keine andere domain-zwischen die Eröffnung & post
Ich arbeite noch immer an meinem Fenster Titel schmutzigen trick. können wir nicht erhalten den Titel des Fensters, wenn es auf einer anderen domain, aber wenn es kommt wieder auf jsfiddle der Titel ist vorhanden (es ist nicht das Vorherige problem mit postMessage). Hier ist das Beispiel: http://jsfiddle.net/L4YzG/14/ ... Dies kann eine alternative sein, aber ich sah nur etwas über die übergabe der Daten in ein cookie, es muss nur getestet werden.
Update 04/02: die Weitergabe der infos in den Titel, ist nicht ausreichend, wenn die gut funktioniert, wenn die final-domains sind die gleichen, aber nicht cross-domain. Ich wollte injizieren einen iframe von der selben domain zu geben diese infos aber ich kann nicht teilen, die Kind-Fenster-Objekt (postMessage brauchen ein serialisiertes Objekt).
Schließlich habe ich versucht, zu teilen, ein cookie (erstellt & erhielt in js) zwischen den injizierten iframe, und untergeordnete Fenster, das funktioniert gut in chrome & ff, konnte aber immer noch nicht erhalten, richtig mit dem IE. Nach Zugabe von P3P-Header funktionierte es gut, dies scheint die wahre Lösung. Safari scheint einige Probleme mit dieser Technik, so dass ich nur halten diese Technik als fallback.
InformationsquelleAutor der Frage bumpmann | 2014-01-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es gebrochen? Na ja, irgendwie schon.
Ich habe versucht, verschiedene Ideen und nicht bekommen konnte den code in Ihrem jsFiddle zu arbeiten. Bei dieser Suche MSDN-Blog-Beitrag, finden wir, dass
postMessage
funktioniert nur zwischen IFrames in älteren IE-Versionen, die noch nicht Fix für IE 11.Artikel links zu einer demo des Problems. Es gibt ein paar workarounds, beinhalten den Aufruf von Skripten auf dem
window.opener
. Jedoch, wie das blog heißt es (Hervorhebung von mir):So wie es aussieht die einzige Möglichkeit, dies zu tun ist etwas wie diese, wo das Kind ist zu Gast in einem IFrame im parent. Habe ich eine ähnliche demo hier, basierend auf der code in Ihnen. Es ist ziemlich einfach, aber sendet eine Nachricht an den
contentWindow
des IFrame, das wiederum reagiert.Sehe ich die Empfehlung
MessageChannel
anstelle, aber ich Frage mich auch, wenn mit Web-Worker könnte sich lohnen zu untersuchen, obwohl Ihr nutzen würde, hängt natürlich von der Natur Ihrer Aufgabe. Es ist auch die Antwort auf diese Frage, wo der IFrame-Ansatz verwendet wurde, sondern eine jQuery-UI-dialog verwendet wurde, um es anzuzeigen - ich könnte mir vorstellen, Sie könnten das gleiche mit modals in der Bootstrap-wenn Sie möchten, dass.Referenz:
HTML
Parent-Skript
Kind HTML-und JS -
InformationsquelleAutor der Antwort nick_w
Lächerlich, dieses "Sicherheits-feature" kann verwendet werden, in umgekehrter umgehen die crossdomain Einschränkung ganz.
Im übergeordneten Fenster an
example.com
:Auf
example.com
server:Einem popup-Fenster öffnen, um Ihre domain umleiten auf jsfiddle, und die postMessage-Aufruf im IE funktioniert. Sie können auch navigieren Sie zu jedem Bereich nach, und weiter zu machen postMessage-Aufrufe an die übergeordnete Fenster.
InformationsquelleAutor der Antwort Neil Sarkar
Gibt es ein paar Erwähnungen von einer
iframe
umgehen, aber die einzigen, die ich gesehen habe, sind senden eine Nachricht an dieiframe
.Hier ist ein Beispiel empfangen eine Nachricht von der
iframe
statt:Übergeordneten Seite (http://first-domain.com/receive-message.html)
Kind-Seite (http://second-domain.com/send-message.html)
InformationsquelleAutor der Antwort c24w