使用postMessage(crossdomain)设置sessionStorage不会在iOS Safari或Chrome上触发

时间:2018-02-08 23:38:10

标签: javascript iframe cross-domain postmessage session-storage

我有一个包含iframe的父页面。当我加载父项时,我将url发送到iframe(postMessage)并将该url设置为sessionStorage。

现在,在桌面浏览器(Chrome,Firefox,IE)上进行测试时,这正是我想要的。

问题

但是,在mobile / ios11 chrome和safari上,没有发送消息,并且没有在iframe的域上设置sessionStorage。 注意我没有阻止手机设置上的Cookie。

window.onload = function() {
  var message = window.location.href;
  iframe.contentWindow.postMessage(message, '*');
};

儿童(iframe)

//global vars
var body = document.getElementsByTagName("body")[0];
var header = document.getElementById("header");
var url = sessionStorage.getItem("customer_url");


//listen
window.addEventListener('message', function(event) {
    // clear
    window.sessionStorage.removeItem("customer_url");

    // set
    var customer_url = `${event.data}`;
    window.sessionStorage.setItem("customer_url", customer_url);
});

//show top bar if storage is set
window.onload = function() {

    if (sessionStorage.getItem("customer_url") === null) {
        header.classList.remove("active");
    } else {
        header.classList.add("active");
    }

    var close = document.getElementById("close-hosted");
    close.href = customer_url;

};

固定

使用iframe.onload而不是window.onload。

0 个答案:

没有答案