最大调用栈大小超过了popstate

3

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

步骤:

步骤1:我点击了一个liaddToHistory()运行得很好。

步骤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();
2个回答

4
问题在于设置window.location会触发另一个popState事件,从而再次设置window.location,从而调用popState事件...

你提出的解决方案是什么? - Steffi
1
在设置 window.location 之前,您可以尝试调用 $(window).unbind('popstate'),这样应该可以让您正常重定向。 - spro

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接