我遇到了问题
这是一种情况:我有一个内部有网站的iframe。
我还有一个播放器包装器。
我需要这个单独的玩家,当用户通过站点上的链接时,它不会停止或刷新
使用postMessage进行包装器和iframe之间的可爱对话,我尝试触发历史记录更改(onpopstate),以便用户点击"返回" "前进"我的iframe重新加载。
我不知道为什么我的活动仅在故事的第一页上起作用(可能不是。我仍然没有得到它)。为什么OMG 为什么每个历史状态都会在那里加倍?
像这样:
这是我的触发器代码。并且 请告诉我这种不良行为可能是什么原因?
包装方
var zaya = document.getElementById("iframe").contentWindow;
window.onpopstate = function(data) {
zaya.postMessage({
name: "popstate",
url: window.location.host + window.location.pathname
},
"http://urlofwebsite.com"
);
alert("location: " + document.location + ", state: " + JSON.stringify(event.state));
};
iframe方
function listenerIF(data) {
var info = data.data;
if (data.origin !== "http://urlofwebsite.com") return;
if (info.name === "popstate") {
document.location = info.url;
}
}
if (window.addEventListener) {
window.addEventListener("message", listenerIF, false);
} else {
window.attachEvent("onmessage", listenerIF);
}
但是这个触发器无论如何都不起作用......
答案 0 :(得分:0)
我从来不知道iframe会将其历史状态添加到主历史中。所以我修理了这个:
$("a").on("click", function(e){
e.preventDefault();
var neededUrl = this.getAttribute('href');
/*here is a code with postMessage to wrapper So there will be pushState()*/
window.location.replace(neededUrl);
});