当我使用javascript手动编辑哈希时,有没有办法不运行onHashChange?
window.location = 'http://www.site.com/foo.html#newHash';
当用户在浏览器上点击 back 或转发或者自己键入新哈希时,我只想运行onHashChange。
答案 0 :(得分:3)
不是最干净的方法,但您可以在通过JS更改哈希之前设置标志。我把它包装在一个函数中 - windowLocation()
。
function windowLocation(url) {
window.jsHashFlag = true;
window.newURL = url;
window.location = url;
}
function hashChange(e) {
if(window.jsHashFlag && e.newURL == window.newURL) {
// hash changed programmatically
window.jsHashFlag = false;
window.newURL = '';
}
else {
// hash changed manually
// do something
}
}
window.jsHashFlag = false;
window.onhashchange = hashChange;
// ...
windowLocation('http://www.site.com/foo.html#newHash');
答案 1 :(得分:0)
您可以使用jquery bbq(http://benalman.com/projects/jquery-bbq-plugin/)挂钩onHashChange事件,并有条件地触发您想要的任何操作。我不知道如何检测后退/前进点击。