在手动编辑window.location期间忽略onHashChange

时间:2011-02-25 19:06:58

标签: javascript browser

当我使用javascript手动编辑哈希时,有没有办法不运行onHashChange

window.location = 'http://www.site.com/foo.html#newHash';

当用户在浏览器上点击 back 转发或者自己键入新哈希时,我只想运行onHashChange。

2 个答案:

答案 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事件,并有条件地触发您想要的任何操作。我不知道如何检测后退/前进点击。