首页 > 解决方案 > Chrome 扩展脚本有时会在网页之前加载

问题描述

我正在尝试使用我的 chrome 扩展将内容添加到网页上,但它需要页面完全加载,以便它可以解析出这些网页的 HTML 文档中特定属性的类名和 id。有时它可以工作,但有时,每当我在脚本中使用 document.getElementsByClassName() 时,它都会返回 null 而不是 [object HTMLDivElement]。我尝试添加 "run_at": "document_end"到我的 manifest.json 的 content_scripts 键以及在我的脚本顶部使用下面的代码,但脚本会在所有 div 元素加载到网页上之前继续运行。我能做些什么来解决这个问题?我只需要在页面上完全加载所有 HTML 元素后运行我的脚本。如果需要,我可以添加更多代码,但我需要将我的项目的细节保密,所以我不能添加比我已经发布的更多的内容。

内容.js:

if (document.readyState === 'loading') {  // Loading hasn't finished yet
  document.addEventListener('DOMContentLoaded', startExtension);
} else {  // `DOMContentLoaded` has already fired
  startExtension(); //Runs the rest of the script
}
function startExtension() {
  alert(document.getElementsByClassName("class_name"));
}

标签: javascriptgoogle-chrome-extension

解决方案


我找到了这个问题的答案。我在下面使用了这段代码,到目前为止,每次我重新加载网页时它都在工作:

document.onreadystatechange = function () {
    if (document.readyState === 'complete') {
      startExtension();
    }
  }

推荐阅读