历史浏览器翻倍

时间:2016-10-17 14:40:18

标签: jquery html5 iframe browser popstate

我遇到了问题 这是一种情况:我有一个内部有网站的iframe。 我还有一个播放器包装器。
我需要这个单独的玩家,当用户通过站点上的链接时,它不会停止或刷新 使用postMessage进行包装器和iframe之间的可爱对话,我尝试触发历史记录更改(onpopstate),以便用户点击"返回" "前进"我的iframe重新加载。
我不知道为什么我的活动仅在故事的第一页上起作用(可能不是。我仍然没有得到它)​​。为什么OMG 为什么每个历史状态都会在那里加倍?
像这样:

  1. Musicsets
  2. 艺术家
  3. 艺术家编号34786
  4. 搜索页面
  5. 回去(现在我应该有一个艺术家页面。我的iframe正确刷新,但包装器有相同的网址和标题)
  6. 再次返回(现在更改包装器的URL)
  7. 这是我的触发器代码。并且 请告诉我这种不良行为可能是什么原因?

    包装方

    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);
    }
    

    但是这个触发器无论如何都不起作用......

1 个答案:

答案 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);
    });