@TheMrViper

Почему window.postMessage может не работать?

Здравствуйте.

Столкнулся с задачей, где нужно было связать фрейм и окно на разных доменах, единственным решением было использование window.postMessage.

Тщ оно почему то не хочет работать.

В моём браузере все работает корректно, а вот у других нет

У меня
Windows 10 Chrome
У других
MacOS Safari
MacOS Chrome
Windows 10 Chrome

Window

function customHandler(callback){
    if (window.addEventListener) {  // all browsers except IE before version 9
        window.addEventListener ("message", callback, false);
    } else {
        if (window.attachEvent) {   // IE before version 9
            window.attachEvent("onmessage", callback);
        }
    }
}

customHandler(function(e) {
    console.log('WINDOW1: recv: ', e.data);

    if (e.data.status == true) {
        var data = {status: false, message: 'test'};
        console.log('WINDOW1: send: ', data);
        document.getElementById('regpopFrame').contentWindow.postMessage(data, "*");
    }
});


$(window).on('message', function(e) {
    console.log('WINDOW2: recv: ', e.originalEvent.data);

    if (e.originalEvent.data.status == true) {
        var data = {status: false, message: 'test'};
        console.log('WINDOW2: send: ', data);
        document.getElementById('regpopFrame').contentWindow.postMessage(data, "*");
    }
});

    window.onmessage = function(e) {
        console.log('WINDOW3: recv: ', e.data);

        if (e.data.status == true) {
            var data = {status: false, message: 'test'};
            console.log('WINDOW3: send: ', data);
            document.getElementById('regpopFrame').contentWindow.postMessage(data, "*");
        }
    };


Frame

function customHandler(callback){
    if (window.addEventListener) {  // all browsers except IE before version 9
        window.addEventListener ("message", callback, false);
    } else {
        if (window.attachEvent) {   // IE before version 9
            window.attachEvent("onmessage", callback);
        }
    }
}

customHandler(function(e) {
    console.log('FRAME1: recv: ', e.data);

    if (e.data.status == true) {

        var data = {status: true, message: 'test'};
        console.log('FRAME1: send: ', data);
        parent.postMessage(data, "*");
    }
});


$(window).on('message', function(e) {
    console.log('FRAME2: recv: ', e.originalEvent.data);

    if (e.originalEvent.data.status == true) {
        var data = {status: true, message: 'test'};
        console.log('FRAME2: send: ', data);
        parent.postMessage(data, "*");
    }
});

window.onmessage = function(e) {
    console.log('FRAME3: recv: ', e.data);

    if (e.data.status == true) {
        var data = {status: true, message: 'test'};
        console.log('FRAME3: send: ', data);
        parent.postMessage(data, "*");
    }
};


$(window).load(function(){
   parent.postMessage({status: true, message: 'test'}, '*');
});
  • Вопрос задан
  • 923 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы