是jQuery $(window).load(); 没有声明的页面上没有触发事件? (…在chrome扩展内容脚本中)

我正在开发一个操纵网页的Google Chrome扩展程序,但是在部分加载(DOM)或完全加载(带图像)之后。

现在似乎很多网站都使用了

 

声明,或其中的一些变体,但许多其他人没有。 问题主要是关于HTML doctypes …我不确定其他人。

假设如果网页没有DOCTYPE声明,则可以安全地使用$(window).load(); 不会被解雇?

一开始我使用$(document).ready(); (对于加载DOM时),但后来切换到$(window).load(); (也让图像加载)。

问题是,现在$(window).load(); 如果没有DOCTYPE似乎不起作用。 $(文件)。就绪(); 无论是否声明DOCTYPE,似乎都适用于所有页面。

也许这对于有同样问题的其他人有用。 我搜索了一下,没有找到决定性的答案。 看来我最终会使用这样的东西:

 if (window.document.doctype != null) {$(window).load(checkEntries);} if (window.document.doctype == null) {$(document).ready(checkEntries);} 

我想我的问题是……这是正常的,必须检查DOCTYPE以了解使用哪个事件? 或者我在这里遗漏了什么?

基本上,为什么$(window).load(); 如果没有DOCTYPE声明,似乎不会开火?

基本上,你不应该使用$(window).load(),因为它不是完全支持的。 如果你确实需要它,那么你上面的解决方案是你能做的最好的。 jQuery页面很好地总结了这些警告:

与图像一起使用时加载事件的注意事项

开发人员尝试使用.load()快捷方式解决的常见挑战是在图像(或图像集合)完全加载时执行函数。 应该注意有几个已知的警告。 这些是:

  • 它不能一致地工作,也不能可靠地跨浏览器
  • 如果图像src设置为与之前相同的src,则它在WebKit中无法正确触发
  • 它没有正确地冒泡DOM树
  • 可以停止为已经存在于浏览器缓存中的图像触发

url: http : //api.jquery.com/load-event/

.ready()方法通常与属性不兼容。 如果必须使用load,则不要使用.ready()或使用jQuery的.load()方法将加载事件处理程序附加到窗口或更具体的项目(如图像)。