希望有人对此有一个好的答案:
为什么 Chrome (14.0) 在刷新页面时会触发文档就绪和窗口加载事件?请注意,我不是在谈论新页面加载时发生的情况,而是在其加载之前发生的情况。请参阅以下代码:
<form name="form1" method="post" action="tmp.aspx?a=1" id="form1">
<script type="text/javascript">
$(document).ready(function () { console.log('document/ready' + new Date()); });
$(window).load(function () { console.log('window/load' + new Date()); });
</script>
<a href="tmp.aspx?a=1">tmp</a>
</form>
当我第一次访问页面时,我在控制台上得到两个输出,一个用于文档/就绪,一个用于窗口/加载。当我刷新页面时,会快速输出另外两个页面,然后立即再输出两个页面(从新页面 View )。如果我只是单击直接返回同一页面的链接(tmp.aspx),则不会发生这种情况。
我确信对此有一个很好的解释。
编辑:
对 $(document).ready()
和 $(window).load()
的额外调用是在该页面刷新之前进行的。因此,当我第一次加载页面时,它们的方法会被调用一次,然后我点击刷新,并且在页面重新加载之前,会再次调用这些方法。之后,当页面刚刚重新加载时,这些方法将被第三次调用。
最佳答案
在 14.0.835.202 观察到的行为。编辑:(在 Windows 7 x64 上)
这不是 jquery 错误:DOMContentLoaded 在页面卸载之前再次被触发。
简单的测试来检查这一点:
function startpage() {
console.log('page loaded');
}
function unloadPage(){
console.log("page unloaded");
}
document.addEventListener("DOMContentLoaded", startpage, false);
window.onbeforeunload = unloadPage;
刷新后您应该看到:
page loaded
page loaded // should not be here and is not on Firefox.
page unloaded
loaded
在您的控制台中(启用持久性)
我认为这只是 Chrome 的一个错误。不是控制台版本,因为时间戳证明它不是重复的。
编辑:相同的 Chrome 版本但运行 OSX 似乎没问题(请参阅下面的评论)。它倾向于确认这是一个错误。
关于javascript - Chrome 中的页面重新加载会在重新加载页面之前不必要地触发绑定(bind)事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7204734/