我通过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?
答案 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
,如果它不存在,不执行代码,简单。