具有declarativeContent.RequestContentScript的Chrome扩展

nob*_*ody 3 javascript css google-chrome-extension

我正在尝试制作一个Chrome扩展程序,该扩展程序将监视GMail并在用户开始编写消息时执行某些操作。在研究了示例和文档之后,我发现我应该使用declarativeContent来完成此任务,该声明会在页面更改时做出反应。

这就是我现在所做的。

manifest.json:

{
  "manifest_version": 2,
  "name": "Gmail helper",
  "version": "0.1",
  "permissions": [ "declarativeContent" ],
  "background": {
    "scripts": ["background.js"],
    "persistent": false
  }
}
Run Code Online (Sandbox Code Playgroud)

background.js:

chrome.runtime.onInstalled.addListener (function (details) {
  chrome.declarativeContent.onPageChanged.removeRules (undefined, function () {
    chrome.declarativeContent.onPageChanged.addRules ([{
      conditions: [
        new chrome.declarativeContent.PageStateMatcher({
          pageUrl: { hostEquals: 'mail.google.com', schemes: ['https'] },
          css: ["div"]
//          css: ["div[aria-label='Message Body']"]
        })
      ],
      actions: [ new chrome.declarativeContent.RequestContentScript({js: ["content.js"]}) ]
    }]);
  });
});
Run Code Online (Sandbox Code Playgroud)

content.js:

alert ("Test");
Run Code Online (Sandbox Code Playgroud)

我的计划是声明一个内容脚本,该脚本将触发GMail中的页面更改。我添加了一个声明性规则,其中定义了pageURL,css和action。根据我的理解,应该在pageUrl和CSS内容匹配时执行content.js。但是,不会执行content.js。

我究竟做错了什么?

谢谢。

wOx*_*xOm 7

在网站上运行内容脚本需要该网站的权限,declarativeContent API文档中没有明确说明该权限,但是可以通过缺少“此操作无需主机权限就可以使用”注释来推断,该注释在其他网站上也存在。动作。declarativeContent API的目的是在没有任何权限确认警告的情况下从WebStore安装扩展,因此,除非您在清单中明确添加了该API,否则该API自然不会授予您访问mail.google.com的权限:

"permissions": ["declarativeContent", "https://mail.google.com/"]
Run Code Online (Sandbox Code Playgroud)


小智 5

从任务描述中可以看出,您不需要declarativeContent。

如果已打开GMail页面,则需要向页面添加内容脚本,并且需要在内容脚本中向消息编辑器DOM元素(或需要跟踪的任何其他元素)添加侦听器。

假设您知道第二步,要向GMail页面添加内容脚本,需要在清单中添加以下内容:

  "content_scripts": [
    {
      "matches": [
        "https://mail.google.com/*"
      ],
      "js": ["content.js"]
    }
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您也不需要后台脚本和权限。

注意:尽管您不需要指定权限,但是您的扩展程序将需要向用户询问权限。在安装过程中,Chrome会警告用户,您的扩展程序将有权访问页面上的所有用户数据,以使该用户可以在不同意的情况下取消安装。