Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Gmail Chrome扩展名和document.readyState_Javascript_Google Chrome_Dom_Google Chrome Extension_Gmail - Fatal编程技术网

Javascript Gmail Chrome扩展名和document.readyState

Javascript Gmail Chrome扩展名和document.readyState,javascript,google-chrome,dom,google-chrome-extension,gmail,Javascript,Google Chrome,Dom,Google Chrome Extension,Gmail,我正在为gmail创建一个chrome扩展,当某些页面对象加载时,我看到了一些奇怪的不稳定性。因为我试图修改GMAIL DOM(为我的扩展定制),所以需要在初始化程序运行之前完全加载它。我的扩展总是在DOM完全加载之前进行初始化,所以我需要一种方法让它进行轮询,直到DOM完全格式化才能完成它的工作 我曾尝试使用document.readyState轮询文档,以便知道何时开始修改完全加载的DOM,但它并不总是有效 当页面开始加载时,我将document.readyState的打印输出放入控制台,每

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

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

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

为什么会这样?是否有更好的方法让我的扩展初始化脚本检查,以确保在启动DOM mods之前DOM已完全加载

编辑--
我有一个脚本,它将document.readyState作为脚本作为内容脚本注入UI。

您的
文档代码。readyState
应该位于您的内容脚本上

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


更多信息:Gmail网站是动态的
readyState
/
DOMContentLoaded
和friends都是无用的,因为大多数UI都是动态构建的,不在“初始”DOM中。这正是你所观察到的


您需要轮询RobW提到的compose按钮,或者观察是否添加了它。另外值得注意的是与gmail DOM交互并使用document.readyState知道何时激活的。

我的代码都位于内容脚本中。我根本不使用此chrome扩展的背景或弹出页面。如果您正在等待“撰写”按钮出现,为什么不轮询该按钮而不是
文档。readyState
?readyState和该按钮之间没有保证的关系……要等待元素存在进行初始化,我建议对MutationObserver进行轮询(使用setTimeout),因为它的性能更好。@RobW我想这取决于您需要多快的反应速度。如果MOs使用一次(并且之后断开连接),页面是否仍然会变慢?断开连接的突变观察者从未变慢(突变事件确实如此)。然而,尤其是当一个动态页面如Gmail被构建时,突变观察者被频繁触发。因为OPs的目标是在呈现compose按钮时最终运行一些逻辑,所以重复轮询按钮就足够了。例如,250毫秒的超时时间足以及时(在一瞬间)检测到按钮。嘿,伙计们,这是很棒的东西,谢谢!在我知道jQuery被加载以检查按钮是否存在(如您所建议的)之后,我使用了jQuery选择器,并进行了100毫秒的轮询。这似乎工作正常,不会降低页面加载速度,但我想知道为什么我可能会使用MO?在最坏的情况下(在轮询后添加节点),添加按钮后,代码将等待约100毫秒。从用户的角度来看,这几乎是不可察觉的,但有时您可能需要立即做出反应。MOs在DOM修改后立即触发,因此没有延迟。Rob的建议意味着MOs会在Gmail开启场景中触发太多次,因此会减慢速度。