3

我尝试使用popstate函数,但出现错误: Uncaught RangeError: Maximum call stack size exceeded

一步一步

第 1 步:我点击了一个li. addToHistory() 效果很好。

第2步:我点击backtohome按钮。addToHistory() 效果很好

第 3 步:我点击前进按钮,我绑定window.popstate并在该行window.location我有一个无限循环。而且我没有看到下一页。

我的功能有什么问题?

function addToHistory(url) {
      window.history.pushState(null, " ", url);
}

$("li").on("click", function(e){
      var name = this_li.attr("data-name");
      addToHistory("#" + name); // example http://azerty.com/#kevin
      ...
}

$("#backtohome").on("click", function(){
      addToHistory("http://azerty.com/");
      ...
}

function hash(){
     var popped = ('state' in window.history && window.history.state !== null), 
             initialURL = location.href;

     $(window).bind('popstate', function (event) {
        // Ignore inital popstate that some browsers fire on page load
        var initialPop = !popped && location.href == initialURL
        popped = true
        if (initialPop) return;

        window.location = window.location.href;
        return;

     });
 }

 hash();
4

2 回答 2

4

问题是设置 window.location 正在触发另一个 popState 事件,因此再次设置 window.location ,因此调用了 popState 事件......

于 2014-02-23T11:25:42.790 回答
0

我遇到了类似的问题并通过删除“location.href = location.href;”来解决它 在 popstate 事件中

于 2017-08-11T15:54:25.200 回答