是否可以在不调用hashchange事件的情况下更改页面的散列?更改散列而不更新历史堆栈
正如我的应用我想要做的事,如:
$(window).hashchange(function(){
hash = ...; // here I change the hash to something else
window.location.hash = hash; // then update it
});
上面代码中的明显的问题是,它会导致环路window.location.hash将调用hashchange事件,然后如此等等。
但是在我的应用我只改变一个条件哈希:
$(window).hashchange(function(){
var hash = window.location.hash;
var lastChar = hash.substr(-1);
if(lastChar != '/') {
// Add trailing slash
hash = hash.replace(/\/?$/, '/');
// Update the hash
window.location.hash = hash;
}
});
因此,它只能被调用IF尾随斜线没有找到,然后一旦它加入它,然后它不会再次输入条件,这样就不会发生上面提到的循环问题。
但它仍然会调用hashchange事件!从现在起,当和两个问题:因为以前的页面是当前页和浏览器卡在当前页面的无限堆栈
历史被打破。
我在我的应用程序中对hashchange做了一个AJAX请求,所以它会做两次调用来添加结尾的斜杠。
是否有可能在不调用事件的情况下将该斜线添加到散列?
也许在做window.unbind('hashchange')
。这会起作用吗?而且还需要在HTML4浏览器中工作,因此HTML5 History API不是此处的选项。
我可以为HTML4浏览器做些什么?对不起,我知道我没有指定。谢谢。 – Cameron
pushState仍然会创建一个历史记录条目,但replaceState会正常工作...除了它只是HTML5 :) – Cameron
@Cameron对于HTML4浏览器,您可能需要保留一些额外的额外状态以指示是否引起了当前的'hashchange'事件通过你自己故意改变哈希,如果是这样的捷径调用AJAX调用。它不能解决“额外的历史记录”问题,但它可能有所帮助。 – Alnitak