Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery$(window.load();事件不会在没有<;的页面上触发;!DOCTYPE>;宣言?(…在chrome扩展内容脚本中)_Javascript_Jquery_Events_Google Chrome Extension_Doctype - Fatal编程技术网

Javascript jQuery$(window.load();事件不会在没有<;的页面上触发;!DOCTYPE>;宣言?(…在chrome扩展内容脚本中)

Javascript jQuery$(window.load();事件不会在没有<;的页面上触发;!DOCTYPE>;宣言?(…在chrome扩展内容脚本中),javascript,jquery,events,google-chrome-extension,doctype,Javascript,Jquery,Events,Google Chrome Extension,Doctype,我正在开发一个GoogleChrome扩展来处理一个网页,但是在它被部分加载(DOM)或完全加载(带有图像)之后 似乎现在很多网站都使用 <!DOCTYPE html> 我想我的问题是。。。必须检查DOCTYPE才能知道要使用哪个事件,这正常吗?还是我在这里遗漏了什么 基本上,为什么$(window.load();如果没有DOCTYPE声明,似乎不会触发?方法.ready()通常与属性不兼容。如果必须使用load,请不要使用.ready()或使用jQuery的.load()方法将l

我正在开发一个GoogleChrome扩展来处理一个网页,但是在它被部分加载(DOM)或完全加载(带有图像)之后

似乎现在很多网站都使用

<!DOCTYPE html>
我想我的问题是。。。必须检查DOCTYPE才能知道要使用哪个事件,这正常吗?还是我在这里遗漏了什么


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

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

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

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

开发人员试图使用.load()解决的一个常见问题 快捷方式是在图像(或 图像)已完全加载。有几个已知的警告 这一点值得注意。这些是:

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

URL:

我做不到。希望这能帮助你@Herome-这个问题描述了两者之间的区别…因此不太可能有帮助。谢谢Herome,我已经阅读了这篇文章,非常有帮助。昆汀,谢谢,是的,这个例子确实有效。有那么一会儿,我以为我把这两个搞混了,但是。。。至于我的chrome扩展(可能还有任何chrome扩展),使用$(window.load)(checkEntries)打开示例页面;在我的扩展中,不运行checkEntries函数,而使用$(document).ready(checkEntries);运行checkEntries函数。也许这是一个特定于chrome扩展的问题?在清单文件中,我使用了“run_at”:“document_idle”,但我也尝试了document_start和document_end。这可能是Chrome扩展特定的问题。这个问题不是可以通过简单地在扩展的所有HTML中包含doctype来解决吗?或者它是将外部HTML拉入并显示出来的?这指的是
jQuery('img#someImage')。load()
不是
jQuery(window)。load()
。有些点确实特别指的是
img
load事件,但其他点通常适用于load事件。请提供证据证明“它在跨浏览器中无法持续工作,也无法可靠地工作“应用于
窗口时为真。其他三个不适用,因为它们没有描述任何与
窗口相关的内容。我认为这是一个跨浏览器问题,因为涉及doctype,包含doctype通常可以解决现有的跨浏览器问题。但是,在看到您试图复制错误后,我怀疑doctype是否是问题所在。谢谢您的链接。我希望我能提供一个例子,但我仍在开发扩展,它还没有发布。我还没有完全测试它,因为我刚刚遇到这个问题。我想我只是希望得到一个确认,如果它是这样工作的,并解释为什么它是这样。但如果它只在chrome扩展中可复制,我知道我获得具体答案的机会要小得多……我认为他没有使用
属性,他已经在使用jQuery的
.load()
方法了,正如你所建议的。是的,我只是在使用chrome扩展在任何给定页面上运行脚本,不管他们的代码是否有body onload=''或是否指定了doctype。我只是想弄明白为什么它在chrome扩展中是这样工作的。在上面的示例页面中,它似乎在浏览器中工作,但在chrome扩展中不起作用。这对我来说似乎有点奇怪,现在我正试图弄明白。
if (window.document.doctype != null) {$(window).load(checkEntries);}
if (window.document.doctype == null) {$(document).ready(checkEntries);}