javascript - Chrome 中的页面重新加载会在重新加载页面之前不必要地触发绑定(bind)事件

标签 javascript jquery google-chrome google-chrome-devtools jquery-events

希望有人对此有一个好的答案:

为什么 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/

相关文章:

javascript - 从数据属性设置 jQuery 插件选项

javascript - asteroid 查询结果

html - Google Chrome 中不显示网站图标

javascript - 如何更改 Angular Material 日期选择器当前日期颜色

Javascript window.location.href 不重新加载数据

javascript - 使用带有 jquery 的 parseint 来查找其他值

google-chrome - 如何在旧版 Chrome 上测试网站?

javascript - 如何以正确的方式创建由我的 Rails 应用程序变量初始化的全局 js 变量?

javascript - 加载页面并在单个书签中应用 javascript

c# - JavaScript 中的 `WebWorkers` 概念是否类似于异步函数?