gpt4 book ai didi

javascript - 如何在页面的 Javascript 执行后加载内容脚本?

转载 作者:行者123 更新时间:2023-12-02 23:09:34 25 4
gpt4 key购买 nike

我的扩展应该仅在其注入(inject)的页面已完全加载后加载内容脚本 searchTopic.js(是的,我已在扩展 list 中将“run_at”设置为“document_end”),但事实上它在所有 DOM 对象创建之前加载(关键的对象是通过页面中的一些 Javascript 创建的)。那么,问题是,如何才能等到页面的 Javascript 执行完毕?这是我的 list :

"content_scripts": [
{
"run_at": "document_end",
"matches": ["https://groups.google.com/forum/*"],
"js": ["searchTopic.js"]
}
],

最佳答案

"run_at": "document_end" is the equivalent to DOMContentLoaded.也就是说,它在加载静态 HTML 之后、但在缓慢图像和缓慢完成 JavaScript 之前触发。

因此,您不能仅通过单独设置 list 来设置在页面 JS 之后触发的内容脚本。您必须在内容脚本本身中为此编写代码。

对于内容脚本,"run_at": "document_end" 将在 onload 事件之前触发(与默认的 document_idle 不同 - 它可以在不可预测的时间发生火灾)。

因此,第一步是在内容脚本 (searchTopic.js) 中使用如下代码等待 load 事件:

window.addEventListener ("load", myMain, false);

function myMain (evt) {
// DO YOUR STUFF HERE.
}


如果您关心的脚本需要一段时间才能完成,您将必须根据具体情况轮询某些条件。例如:

window.addEventListener ("load", myMain, false);

function myMain (evt) {
var jsInitChecktimer = setInterval (checkForJS_Finish, 111);

function checkForJS_Finish () {
if ( typeof SOME_GLOBAL_VAR != "undefined"
|| document.querySelector ("SOME_INDICATOR_NODE_css_SELECTOR")
) {
clearInterval (jsInitChecktimer);
// DO YOUR STUFF HERE.
}
}
}

关于javascript - 如何在页面的 Javascript 执行后加载内容脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13917047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com