javascript - Gmail Chrome 扩展和 document.readyState

标签 javascript google-chrome dom google-chrome-extension gmail

我正在为 gmail 创建一个 chrome 扩展程序,我发现在加载某些页面对象时出现一些奇怪的不稳定性。因为我正在尝试修改 GMAIL DOM(为我的扩展自定义它),所以它需要在我的初始化程序运行之前完全加载。我的扩展总是在 DOM 完全加载之前就开始初始化,所以我需要一种方法让它进行轮询,直到 DOM 完全形成以执行它的操作。

我曾尝试使用 document.readyState 来轮询文档,以便我知道何时开始修改完全加载的 DOM,但它并不总是有效。

一旦页面开始加载,我将每 100 毫秒轮询一次的 document.readyState 打印输出放入控制台,我注意到在 DOM 完全加载之前,大约 1/10 的页面加载 document.readyState 变为“完成”。我之所以能说出这一点,是因为我为 GMAIL 撰写按钮做了一个 jQuery 选择器,发生这种情况时它变成空的,并且每隔一段时间都会按预期找到它(它会找到撰写按钮)。

为什么会这样?有没有更好的方法让我的扩展初始化脚本检查以确保在触发 DOM mod 之前 DOM 已完全加载?

编辑—— 我将检查 document.readyState 的脚本作为内容脚本注入(inject)到 UI 中。

最佳答案

Gmail 网站是动态的。 readyState/DOMContentLoaded 和其他 friend 都没什么用,因为大部分 UI 都是动态构建的,不在“初始”DOM 中。这正是您所观察到的。

您需要像 RobW 提到的那样轮询撰写按钮,或者观察它是否被添加 MutationObserver events .同样值得注意的是 mutation-summary library .

关于javascript - Gmail Chrome 扩展和 document.readyState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27893300/

相关文章:

javascript - 如何使用 jquery 将所有正文内容包装在一个 div 中?

javascript - 没有 GUI 的带有 Javascript 的 SSH

javascript - 在两个带有淡入淡出的 div 之间切换的最佳方法是什么?

php - 如何使用 jquery 从 php 变量显示 "content"? (它向我展示了 "name"本身,而不是其中的内容)

google-chrome - WEBVTT(.vtt) 相对于 SubReal (.srt) 有何优势?

html - Chrome 中的 Roboto 字体显示不正确

javascript - 在 javascript/jquery 中将时间字符串转换为秒

java - Native Messaging 主机尝试发送长度为 977472013 字节的消息

javascript - 将相邻的 <p> 元素包装到 <div> 中

javascript - nodeIndex 是 IE 中有效的 DOM 元素属性吗?