Я использую 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?