postMessage выдает ошибку "Заблокированный кадр", но только в Safari - PullRequest
0 голосов
/ 09 мая 2020

Я использую postMessage для обмена данными между https://www.example.com (который я назову mainSite) и https://subdomain.example.com (который я назову subSite)

subSite имеет iframe для mainSite,

код subSite выглядит примерно так:

//set the src of the iframe
$("#main-site-iframe").attr("src", "https://www.example.com");
//wait for the main site page to open
$("#main-site-iframe")[0].onload = () => {
    //my page posts a message to their site
    $("#my-iframe")[0].contentWindow.postMessage("messagePlox", "https://www.example.com");  
};

//wait for the iframe to message back
window.addEventListener('message', iframeResponse, false);
function iframeResponse(e) {
    //make sure the request is from the correct site
    if(e.origin == 'https://www.example.com')
    {
        //Got the data
        console.log(e.data);
    }
}

mainSite выглядит так:

//listen for the subdomain to make a request
window.addEventListener('message', subdomainRequest, false);
function subdomainRequest(e) {
    //make sure the request is from the correct subdomain
    if(e.origin == 'https://subdomain.example.com')
    {
        //respond with the data
        e.source.postMessage("We got you", e.origin);
    }
}

Проблема с приведенным выше что он работает во всех браузерах, ЗА ИСКЛЮЧЕНИЕМ Safari, который отказывается от него и говорит:

Блокировал фрейм с источником «https://www.example.com» от доступа к кадру с источником «https://subdomain.example.com ". Протоколы, домены и порты должны совпадать.

Это, кажется, означает, что ответ не работает, поскольку mainSite пытается «получить доступ» к подсайту.

Кто-нибудь знает, почему это только происходит в Safari, а не в Firefox или Chrome?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...