postMessage wciąż przerwany na IE11?

Wydaje się, że window.postMessage jest nadal uszkodzony na IE 11, gdy wiadomość jest

między oknem a podręcznym oknem na dziecko z window.opengdy jest wysyłany z różnych domen[lub ta sama domena w niektórych przypadkach, c.f. aktualizacja 16/01]

Podobne problemy wystąpiły w IE 8/9/10, ale ta funkcja została oznaczona jako „obsługiwana” w IE 11 z „częściowo obsługiwana” w IE 10

Istnieje przykład kodu, który działa na chrome / ff, ale nie na IE:

Theotwieracz (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');
    });
});

Thepopup dziecka (jsbin): (nie będzie działać, jeśli nie zostanie otwarty przez jsfiddle)

$(document).ready(function() {
   $('body').append('sending...');
   window.opener.postMessage("Hello?", "http://fiddle.jshell.net");
   $('body').append('sent...');
});

Czytałem z postuCzy wiadomość pocztowa jest łamana w IE10? że możemy użyćMessageChannel zamiastpostMessage, ale czytając dokument, nie znalazłem sposobu użycia go w moim prawdziwym przypadku, ponieważ musisz przekazać port do okna potomnego.

Przed przesłaniem wiadomości istnieje łańcuch przekierowań, więc nawet jeśli mógłbym wysłać port, stracę dowolny obiekt js wysłany początkowo / przed przekierowaniami.

Masz pomysł na wymianę?

Aktualizacja 14/01: Myślę o przekazaniu moich danych w tytule okna / zakładki i regularnym sprawdzeniu tego tytułu od rodzica ... ale to będzie dość podstępna sztuczka.

Aktualizacja 16/01: Naprawdę zła część polega na tym, że rozbija się, nawet jeśli wiadomość jest wysyłana z tej samej domeny, ale po przekierowaniu przez inną domenę.

oto przykład:http://jsfiddle.net/L4YzG/13/ otwiera popuphttp://jsbin.com/eQeSeros/4/edit to przekierowuje dohttp://jsfiddle.net/mxS8Q/2/ (który publikuje wiadomość)

Jeśli zmienisz okienko URL bezpośrednio przez ostatni przekierowanie adresu URLhttp://jsfiddle.net/mxS8Q/2/show działa to na IE, ponieważ nie ma innej domeny między otwarciem a postem

Nadal pracuję nad brudną sztuczką z tytułem okna. nie możemy otrzymać tytułu okna, gdy znajduje się w innej domenie, ale jeśli wróci on na jsfiddle, tytuł jest dostępny (nie ma poprzedniego problemu z postMessage). Oto przykład:http://jsfiddle.net/L4YzG/14/ ... To może być alternatywne rozwiązanie, ale właśnie zobaczyłem coś o przekazywaniu danych w pliku cookie, wystarczy go przetestować.

Aktualizacja 04/02: Przekazywanie informacji w tytule nie jest wystarczające, jeśli działa dobrze, jeśli końcowe domeny są takie same, ale nie w domenie międzysieciowej. Chciałem wstrzyknąć ramkę iframe tej samej domeny, aby przekazać te informacje, ale nie mogę też współdzielić obiektu okna potomnego (postMessage potrzebuje obiektu do serializacji).

W końcu spróbowałem udostępnić plik cookie (utworzony i otrzymany w js) między wstrzykniętym oknem iframe i podrzędnym, to działa dobrze na chrome & ff, ale nadal nie mogło go poprawnie odebrać z IE. Po dodaniu nagłówków P3P działało dobrze, wydaje się, że jest to prawdziwe rozwiązanie. Safari wydaje się mieć pewne problemy z tą techniką, więc po prostu utrzymuję tę technikę jako awarię.

questionAnswers(4)

yourAnswerToTheQuestion