哪个onLoad首先发射?

时间:2014-04-16 16:26:28

标签: javascript google-chrome google-chrome-extension

在DOM的上下文中,body.onLoad或'[element] .onload'之前会window.onload触发吗?

我的想法是,我希望在整个页面加载完成之前执行一个脚本,但是在某些DOM元素出现之后。

基本上,只要有一个元素X,我想获取X的内容并使用该内容启动异步作业,但我必须获取X的内容的唯一方法是等待X加载,因为我正在进行扩展。因此X.onloadwindow.onload之前可以body.onload被认为是可靠触发的吗?

具体来说,我正在开发Chrome扩展程序,因此暂时如果订单在Safari或IE中有所不同,我不一定需要知道,尽管我总是对其原因和方式感兴趣。< / p>

JS-Perf测试here。它们是不确定的,因为图像在测试运行之前被缓存,使得200万像素的加载速度比空DIV快。

对任何有关如何进行有意义测试的建议持开放态度。

谢谢!

1 个答案:

答案 0 :(得分:1)

根据Teemu和RobW的输入,(以及支持文档here删除事件监听器并在清单中设置的脚本中运行内联代码"run_at":"document_end"将获得所需的结果。

对于在manifest.json

中可能遇到此问题的其他人
 "content_scripts": [
    {
      "matches": ["TARGET_URL"],
      "js": ["myscript.js"],
          "run_at" : "document_end"
    }
  ],

在myscript.js中:

function reqListener () {
    console.log(this.responseText);
}

var oReq = new XMLHttpRequest();
oReq.onload = reqListener;
oReq.open("get", "yourFile.txt", true);
oReq.send();

在DOM解析之后执行此gaurantees,但在子元素加载之前,更早地开始我们的AJAX请求。 (这显然不是生产代码,只是其他人要遵循的示例代码模式)。

感谢所有评论!