Gmail Chrome扩展程序和document.readyState

时间:2015-01-11 23:25:37

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

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

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

一旦页面开始加载,我在控制台中放入了document.readyState的打印输出,每100毫秒轮询一次,我注意到在完全加载DOM之前,大约1/10页面加载document.readyState变得“完整”。我可以告诉这个,因为我为GMAIL compose按钮做了一个jQuery选择器,当它发生时它会变空,并且每隔一段时间就找到它(它找到了compose按钮)。

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

EDIT-- 我有一个脚本,它将document.readyState检查为作为内容脚本注入UI的脚本。

2 个答案:

答案 0 :(得分:3)

Gmail网站是动态的。 readyState / DOMContentLoaded和朋友都没有用,因为大多数用户界面都是在飞行中构建的,而不是在" initial" DOM。这正是你所观察到的。

你需要像RobW提到的那样轮询撰写按钮,或者注意它与MutationObserver events一起添加。另外值得注意的是mutation-summary library

答案 1 :(得分:-1)

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

背景和弹出页面引用的文档不是网页的。

此处有更多信息:https://developer.chrome.com/extensions/overview#arch