新版本chrome
开始出现奇怪的事情,它开始在事件$(window).load(...)
或$(document).ready(...)
之前投放事件$(function (){...})
。
这在以前版本的“chrome”中没有发生,并且在版本31中开始发生。
我的环境:
jQuery 1.7.2
Chrome 31
IIS 7.5
ASP.NET MVC 4
我不明白,但它发生了,如果我们第一次进入没有缓存工作完美,但随后缓存文件css,js,img,开始生产这个问题。
我目前的解决方案是覆盖load
的{{1}}函数,但我认为这是正确的解决方案。
感谢。
修改
我们只能在服务器上播放该站点,我们无法在本地重播(localhost)
修改以获取更多信息 这是服务器的HTTP标头:
jquery
编辑II
我测试了这段代码,知道它是否是jQuery 1.7.1的问题,但是同样的问题发生了:
HTTP/1.1 200 OK
Cache-Control: private, s-maxage=0
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/7.5
X-AspNetMvc-Version: 3.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Thu, 21 Nov 2013 23:02:37 GMT
Content-Length: 176350
结果:
(function() {
if(!window.addEventListener || !document.addEventListener) {
console.log('not supported window.addEventListener');
}
var timeDCL;
function addListener(obj, eventName, listener) {
obj.addEventListener(eventName, listener, false);
}
function finishedDCL() {
timeDCL = new Date();
console.log('DONE document load/ready');
}
function finishedLoad() {
if(timeDCL) {
var delta = new Date() - timeDCL;
console.log(delta + 'ms', 'DONE window load');
}
else {
console.log('Ups DONE first window load');
}
}
addListener(document, "DOMContentLoaded", finishedDCL);
addListener(window, "load", finishedLoad);
}());
答案 0 :(得分:1)
<强> TL; DR 强>
不要依赖加载来始终关注 DOMContentLoaded 。
我知道我在比赛的后期,但其他人可能会在这里结束,所以我发布了这个。 当对'&#34; DOM准备好&#34;进行单元测试时,我遇到了这种行为。实施随机失败。我发现原因是它假设窗口 load 事件始终位于 DOMContentLoaded 之后。
至少在Chrome中 - 目前在第52版 - 一些压力条件(可能与不那么小的javascript库有关,比如jQuery,但我无法肯定地说)可能会发生很长时间用于解析DOM,延迟 DOMContentLoaded 事件。
请注意,在每次失败时,加载事件仅在1ms前触发。
看起来浏览器似乎可以同时触发这两个事件,并选择首先使用DOM。无论出于何种原因。
jQuery.ready实际上是对窗口加载的回退。