javascript - 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"));
}
解决方案
我找到了这个问题的答案。我在下面使用了这段代码,到目前为止,每次我重新加载网页时它都在工作:
document.onreadystatechange = function () {
if (document.readyState === 'complete') {
startExtension();
}
}
推荐阅读
- xslt - 汇总数据可以为空的节点,如果是,设置默认值
- reactjs - 使用 Enter 键反应重定向到另一个页面而不刷新页面
- android - 将xml动画定义成Java
- javascript - 如何在数据表 1.9 版中添加固定列插件
- azure-devops - 在 Azure Devops 查询中返回多个级别
- ios - 如何在不丢失视频原始声音的情况下将音频与视频合并 - iOS Swift
- tkinter - Tkinter 很难看到列表
- database - Navicat 中的封闭数据库
- android - FirebaseMessagingService 中的语言环境没有改变
- javascript - 联系表格小部件,使其被其他网站使用