打开新选项卡并在新选项卡上执行操作

opening new tab and performing actions on the new tab

本文关键字:选项 新选项 执行 操作      更新时间:2023-09-26

扩展脚本:

function newtab() {
    chrome.tabs.create({"url":domain,"selected":true}, function(tab) {
        //--
    });
}

在我的扩展脚本中,我正在打开一个带有某个域的新选项卡。我希望能够检查该新选项卡中的 dom 是否已加载,然后在新选项卡中的 dom 上执行一些操作。

我检查了chrome扩展程序文档,但找不到任何合适的方法来实现它。

请成为我的指路明灯。

内容脚本是扩展中唯一可以访问/修改DOM的部分。

您可以使用所谓的编程注入将内容脚本添加到新打开的选项卡中:

function newtab() {
    chrome.tabs.create({"url":domain,"selected":true}, function(tab) {
        chrome.tabs.executeScript(tab.id, {file: "content_script.js"});
    });
}

.executeScript()受制于run_at参数,该参数默认为 document_idle 。这保证了脚本仅在静态 DOM 完全加载后执行。

在动态 DOM 的情况下(页面的脚本在加载静态内容后创建更多 DOM),即使定义"选项卡已加载"状态也是有问题的。聆听 DOM 更改可以帮助您。

几点注意事项:

  • 以编程方式注入新页面需要该页面的主机权限。如果您事先不知道域,则需要广泛的权限,例如"*://*/*""<all_urls>"
  • "document_idle" 不保证加载所有资源,例如,<img>标签可能已经存在,但图像尚未加载。有关详细信息和建议,请参阅run_at文档。
  • 您可以使用回调 for .executeScript() ,这可能是将一些回复传递回脚本的最简单方法,但请确保您了解预期回调的签名。