eri*_*hak 14 javascript jquery html5 dom browser-history
嘿,我statechange在窗口上设置了以下事件:
History.Adapter.bind(window,'statechange',function(e){
console.log("statechange event occured ");
//more code
var newDoc = document.open();
newDoc.write(file);
newDoc.close();
});
Run Code Online (Sandbox Code Playgroud)
我正在使用history.js,但在这种情况下无关紧要,因为它会定期绑定statechange,我得到的值file应该是并且工作正常.
现在我在外部js文件中有这个代码(和其他代码),在我遍历所有a标签的文件中并应用以下click事件:
$(element).on("click",function(e){
e.preventDefault();
//more code
History.pushState({file : file},title, fullHref);
});
Run Code Online (Sandbox Code Playgroud)
现在当我点击文档时按预期更改但是当尝试使用后退/前进按钮时,statechange事件不会触发.
我应该提一下,这个js也包含在我加载的文件中.
所以我最初的想法是,当文档发生变化但窗口没有变化时,事件仍然存在.这是不正确的,因为它应用statechange事件多次时间.所以我尝试使用cookie一次应用该事件,但仍然做同样的事情.
现在,如果不是更改文档而是简单地将其应用于jQuerys .html(),则statechange 事件将被触发,因此我猜它与文档有关.
为什么会这样?我相信如果我更多地了解在更换文档时窗口事件会发生什么,我可以解决这个问题.
尝试:
popstate通过常规的历史API 绑定到事件,仍然提供相同的结果.pushState不会激活popstate,但后退按钮确实没有状态.on相同的结果信息:
我在mdn中读过:
{{gecko_minversion_note("1.9.2","从Gecko 1.9.2开始,document.open()使用
它使用的URI的文档的主体,而不是从堆栈中取出主体.因此,即使使用wrappedJSObject,也无法再将chrome.write()调用到chrome中的不受信任的文档中.")}}
我不确定,但我认为可以解决这个问题
好吧,最后我发现,尽管您只更改文档,但窗口事件会被删除,因为它们位于文档内部。
我遇到了 History.js 的问题,我认为是因为我更改文档的事实在某些时候打破了它。
我所做的是使用本机 HTML5 历史记录 API 并popstate在新文档中重新绑定该事件。