9

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

似乎现在很多网站都使用

<!DOCTYPE html>

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

假设如果网页没有 DOCTYPE 声明是否安全,那么 $(window).load(); 不会被解雇?

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

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

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

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

我想我的问题是......这是否正常必须检查 DOCTYPE 才能知道要使用哪个事件?或者我在这里错过了什么?

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

4

2 回答 2

6

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

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

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

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

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

于 2012-11-05T12:09:02.087 回答
3

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

于 2012-11-05T12:08:45.863 回答