嘿,我在窗口上设置了以下statechange
事件:
History.Adapter.bind(window,'statechange',function(e){
console.log("statechange event occured ");
//more code
var newDoc = document.open();
newDoc.write(file);
newDoc.close();
});
我正在使用history.js但在这种情况下无关紧要,因为它会定期绑定statechange,我得到file
的值应该是并且正常工作。
现在我在外部js文件中有这个代码(和其他代码),
在文件中我正在遍历所有a
标签并应用以下点击事件:
$(element).on("click",function(e){
e.preventDefault();
//more code
History.pushState({file : file},title, fullHref);
});
现在,当我点击文档时,按预期更改了文档,但在尝试使用后退/前进按钮statechange
时,事件不会触发。
我应该提一下,这个js也包含在我加载的文件中。
所以我最初的想法是,当文档发生变化但窗口没有变化时,事件仍然存在。这是不正确的,因为它应用statechange事件多次时间。所以我尝试使用cookie一次应用该事件,但仍然做同样的事情。
现在,如果不是更改文档而是简单地将其应用于jQuerys .html()
,则statechange事件会被触发,因此我猜它与文档有关。
为什么会发生这种情况?我相信如果我更多地了解在更换文档时窗口事件会发生什么,我可以解决这个问题。
尝试:
popstate
事件,但仍然提供相同的结果。 pushState
不会触发popstate,但后退按钮会触发,但没有状态。on
,结果相同信息:
我在mdn中读过:
{{gecko_minversion_note(“1.9.2”,“从Gecko 1.9.2开始,document.open()使用
它使用的URI的文档的主体,而不是获取 主要的筹码。结果,您无法再打电话 document.write()从chrome转换为不受信任的文档,甚至使用 wrappedJSObject。“)}}
我不确定,但我认为可以解决这个问题
答案 0 :(得分:2)
好吧,最后我发现尽管你只更改了文档,但窗口事件会在文档中被删除。
我用History.js来解决我的问题,我认为因为我改变文件的事实在某些时候打破了它。
我所做的是使用原生HTML5历史记录API并重新绑定新文档中的popstate
事件。
答案 1 :(得分:0)
你试过用LIVE绑定元素吗?
$(element).click(function(e){
e.preventDefault();
//more code
History.pushState({file : file},title, fullHref);
});
变为
$(element).live('click',function(e){
e.preventDefault();
//more code
History.pushState({file : file},title, fullHref);
});
答案 2 :(得分:0)
您必须使用iframe
加载文档,并且可以轻松更改其文档。然后,您可以收听像这样的点击事件,
$("#iframe").load(function () {
$(this.contentWindow).click(function () {
// do your click events here
});
});
如果您将src
属性值更改为另一个文档,则会重新加载iframe。
答案 3 :(得分:0)
您是否尝试过在document.open()方法中设置目标(请参阅 http://www.w3schools.com/jsref/met_doc_open.asp)? 如果不是'您实际上是在写一个空白窗口,那么您可能会丢失历史记录对象。