Gmail Chrome 扩展和 document.readyState

Gmail Chrome Extension and document.readyState

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

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

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

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

编辑-- 我有检查 document.readyState 作为脚本注入 UI 作为内容脚本的脚本。

您的 document.readyState 代码应该位于您的内容脚本中。

后台和弹出页面引用的文档不是网页的。

更多信息在这里:https://developer.chrome.com/extensions/overview#arch

Gmail 网站是动态的。 readyState / DOMContentLoaded 和朋友都相当无用,因为大多数 UI 都是临时构建的,而不是 "initial" DOM。这正是您所观察到的。

您需要像 RobW 提到的那样轮询撰写按钮,或者观察它是否被添加 MutationObserver events. Also of note is the mutation-summary library