我有一个包含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。