TypeError:在未实现接口历史记录

时间:2016-02-04 00:35:25

标签: javascript browser-history

我正在查看这段javascript代码

if (history) {
    var action = settings.replaceState ? history.replaceState : history.pushState;
    if (action) {
        // next line throws the error
        action(null, null, window.location.pathname + window.location.search + '#' + hash);
    }
}

settings.replaceState == true

微软最新的东西给了我这个

  

无效的调用对象

在Chrome中,同一段代码会抛出此

  

未捕获的TypeError:非法调用

我在Firefox中遇到此错误

  

TypeError:在未实现接口历史记录的对象上调用'replaceState'。

当我调试历史记录时,它应该是正确的,并且有一个包含此方法的原型。

除了不同的错误信息,任何人都可以告诉我这里发生了什么?

1 个答案:

答案 0 :(得分:5)

通过将方法分配给变量,您丢失了history的执行上下文。您需要使用call / bind

将执行上下文设置回history
action.call(history,null, null, 
            window.location.pathname + window.location.search + '#' + hash);