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

时间:2016-07-17 09:10:49

标签: javascript google-chrome-extension

扩展程序脚本:

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

在我的扩展程序脚本中,我打开一个包含某个域的新标签页。我希望能够检查新选项卡中的dom是否已加载,然后在新选项卡中对dom执行某些操作。

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

请成为我的指路明灯。

1 个答案:

答案 0 :(得分:1)

Content Scripts是扩展程序中唯一可以访问/修改DOM的部分。

您可以使用所谓的Programmatic Injection将内容脚本添加到新打开的标签页中:

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

.executeScript()run_at parameter约束,默认为document_idle。这可以保证脚本只在 static DOM完全加载后执行。

如果是动态DOM(页面的脚本在加载静态内容后创建更多DOM),甚至定义"标签都会加载"国家是有问题的。 Listening to DOM changes可以帮助您。

几点说明:

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