【问题标题】:Maximum call stack sizeexceed with popstate最大调用堆栈大小超过 popstate
【发布时间】:2014-02-18 11:17:53
【问题描述】:

我尝试使用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();

【问题讨论】:

    标签: javascript history popstate


    【解决方案1】:

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

    【讨论】:

    • 你提出的解决方案是什么?
    • 你可以尝试在设置window.location之前调用$(window).unbind('popstate'),这样应该可以正常重定向。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2020-01-05
      • 2020-08-10
      • 1970-01-01
      • 2017-02-04
      • 2014-08-19
      • 1970-01-01
      • 2015-10-24
      • 2015-12-29
      • 2017-12-27
      相关资源
      最近更新 更多