Chrome中的页面重新加载在重新加载页面之前不必要地触发绑定事件

Ste*_*ten 22 javascript jquery google-chrome javascript-events google-chrome-devtools

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

为什么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>
Run Code Online (Sandbox Code Playgroud)

当我第一次访问页面时,我在控制台上获得两个输出,一个用于文档/就绪,一个用于窗口/加载.当我刷新页面时,会快速输出两个,并在此之后立即输出两个(从新页面视图).如果我只是单击直接返回到同一页面的链接(tmp.aspx),则不会发生这种情况.

我相信对此有一个很好的解释.

问候!

编辑:在页面刷新之前,对$(document).ready()和$(window).load()进行了额外调用.因此,当我第一次加载页面时,他们的方法被调用一次,然后我点击刷新并且在页面重新加载之前再次调用方法.之后,当页面刚重新加载时,这些方法称为第三次.

mdd*_*ddw 7

行为观察于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;
Run Code Online (Sandbox Code Playgroud)

你应该在刷新后看到:

page loaded
page loaded // should not be here and is not on Firefox.
page unloaded
loaded
Run Code Online (Sandbox Code Playgroud)

在您的控制台中(持久性)

我认为这只是一个Chrome漏洞.不是控制台,因为时间戳证明它不是重复的.

编辑:相同的Chrome版本,但运行OSX似乎没问题(请参阅下面的评论).它往往证实这是一个错误.