检查window.history.go是否成功?

时间:2012-04-01 00:01:24

标签: javascript

有没有检查window.history.go命令是否成功更改window.location

即。如果我在历史堆栈中只有3个页面时执行window.history.go(-5),则浏览器将不执行任何操作。

有没有办法检查是否发生这种情况并运行其他代码?错误回调,各种各样。

感谢。

2 个答案:

答案 0 :(得分:3)

要立即回复,首先您需要检查history.length以确保其至少为6,例如去-5。除此之外,我认为唯一的方法是使用setTimeout,如果脚本仍在运行,则将执行回调。

答案 1 :(得分:0)

不是真正的JS专家,但如果你想在用户前进或前进时执行某些操作,你可以使用URL哈希并使用jQuery onhashchange事件触发一些功能。这不会给你历史上的位置,我也不确定跨浏览器兼容性,但它到目前为止我的工作。

$(window).on('load' function(){
    var hash = parent.top.location.hash;
    if(hash == '' || hash == '#' || hash == null){
        //if none, set a hash and reload page
        parent.top.location.hash = '#/some/hash';
        parent.top.location.reload(true);//use true if you dont want to use cached items
    }
});
$(window).on('hashchange', function(){
    do_something(parent.top.location.hash);
});
function do_something(hash){
    //this function will be executed each time the '#' changes
    console.log('hash changed to '+hash);
}