我尝试使用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();
再次设置 window.location,因此调用 popState 事件...
我遇到了类似的问题,并通过在流行状态事件中删除"location.href = location.href;"来解决它