内容脚本自动加载

时间:2017-11-19 05:40:59

标签: google-chrome google-chrome-extension google-chrome-devtools google-chrome-app

我正在开发Chrome扩展程序。它服务于它的目的,但问题是每当我打开一个新标签并访问一个站点时,内容脚本就会自行执行。问题是内容脚本中有一个警告&在访问每个新网站时触发警报时,它开始变得烦人。

目前,我使用chrome.tabs.executeScript API从后台脚本触发内容脚本。但是,我注意到每当我打开一个新选项卡&访问一个新站点,即使在后台脚本中未满足触发它的条件,内容脚本中的代码也会自动执行。

这是正常行为吗?这是所有镀铬扩展应该如何工作?如果是的话,有没有办法防止这种情况发生?现在,我已经将我的内容脚本声明为后台脚本,但我仍然希望找到一个解决方案。

这是我的清单 - manifest.json:

"content_scripts" : [
{
    "matches" : [ "<all_urls>"],
    "js": ["raisealert.js"]
}
],


"background": {
    "scripts": ["background.js"],
    "persistent": false
},

这是后台脚本 - background.js:

if(condition met)
    chrome.tabs.executeScript(null, {
    code: 'var config = ' + JSON.stringify(config)
    }, function() {
        chrome.tabs.executeScript(null, {file: 'raisealert.js'}, function() {
            console.log("Alarm triggered");
        });
    });

这是内容脚本 - raisealert.js

alert("sample alert raised");

1 个答案:

答案 0 :(得分:0)

您可以自动加载content_script,无需编程工作,只需在清单的content_scripts部分中调用它即可。

您可以对所有网址执行此操作,也可以定义脚本应加载的相当细粒度的网址格式。见Manifest注射

如果您想有条件地在不同于URL的条件下注入脚本,那么您可以使用programmatic injection - 这可以基于诸如页面内容或是否有人单击浏览器操作按钮或选择您已定义的右键单击上下文菜单选项。

程序化注入通常会使用chrome.tabs.onupdated侦听器检查特定网址或内容,然后注入或不注入。

如果您的扩展程序可能是可能想要在任何页面上使用的内容,那么通常最好根据用户的慎重操作将其注入,例如:在您的情况下,正如您所说,在每个加载的选项卡和页面上发出警报是令人讨厌的(轻描淡写)。

即使你的脚本没有明显的烦恼,自动加载每个页面也不是一个好主意,除非它对页面的影响几乎为零。

如果它设计用于特定网站,那么通过清单注入适当的网址模式过滤器通常是最好的。