覆盖history.pushState会导致opera 11出错

时间:2011-01-25 12:18:56

标签: javascript html5 cross-browser history opera

我通过greasemonkey脚本/ opera扩展将以下代码注入网页以捕获history.pushState命令,因此我可以在触发时执行一些处理并仍然允许pushState命令之后继续。

(function(history){
  var pushState = history.pushState;
  history.pushState = function(state) {
       if (typeof history.onpushstate == "function") {
          history.onpushstate({state: state});
        }
        alert('pushstate called')
        return pushState.apply(history, arguments);
  }
})(window.history);

代码在FF4和Chrome中运行良好,但在Opera 11中,如果页面调用history.replaceState命令,则会出现以下错误:

  

未捕获的异常:TypeError:'window.history.replaceState'不是函数

有谁知道如何修复上述代码以使用Opera以及Chrome和Firefox?

3 个答案:

答案 0 :(得分:4)

在Opera 11.00,修订版1156中,支持的历史API是这些

>>> history.
back, current, forward, go, length, navigationMode

Opera 11.00尚未涵盖完整的HTML5 history API。通常,如果您想要发现,探索支持的内容,您可以轻松使用Web开发人员工具dragonfly的控制台模式。

答案 1 :(得分:1)

根据When can I use … Opera尚不支持历史记录API,因此这就是您获得该异常的原因。

答案 2 :(得分:0)

我找到了解决方案,只需在执行上述代码之前检查history.replacestate,如果它不存在,不执行代码,简单。