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

the*_*axx 9 javascript jquery events doctype google-chrome-extension

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

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

<!DOCTYPE html>
Run Code Online (Sandbox Code Playgroud)

声明,或其中的一些变体,但许多其他人没有.问题主要是关于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);}
Run Code Online (Sandbox Code Playgroud)

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

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

Luk*_*eGT 6

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

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

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

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

网址:http://api.jquery.com/load-event/

  • 这指的是`jQuery('img#someImage').load()`不是`jQuery(window).load()`. (3认同)