javascript - 带有 declarativeContent.RequestContentScript 的 Chrome 扩展

标签 javascript css google-chrome-extension

我正在尝试制作一个 Chrome 扩展程序,它将监视 GMail 并在用户开始写邮件时执行某些操作。在对示例和文档进行一些研究之后,我发现我应该使用 declarativeContent 来完成它,它会对页面更改使用react。

这就是我现在所做的。

list .json:

{
  "manifest_version": 2,
  "name": "Gmail helper",
  "version": "0.1",
  "permissions": [ "declarativeContent" ],
  "background": {
    "scripts": ["background.js"],
    "persistent": false
  }
}

背景.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"]}) ]
    }]);
  });
});

content.js:

alert ("Test");

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

我做错了什么?

谢谢。

最佳答案

在站点上运行内容脚本需要站点的权限,这在 declarativeContent API 的文档中没有明确说明,但由于缺少“可以在没有主机权限的情况下使用此操作”注释而推断出来,这是出现在其他 Action 中。 declarativeContent API 的目的是在没有任何权限确认警告的情况下从 WebStore 安装扩展,因此除非您在 list 中明确添加它,否则此 API 自然无法授予您访问 mail.google.com 的权限:

"permissions": ["declarativeContent", "https://mail.google.com/"]

关于javascript - 带有 declarativeContent.RequestContentScript 的 Chrome 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46196547/

相关文章:

javascript - 为什么源 map 不起作用?

jquery - 动画不还原

javascript - 使用javascript显示窗口大小

javascript - 如何在Chrome扩展内容脚本中获取D3节点的数据

google-chrome-extension - 如何将 chrome 扩展的高度设置为浏览器窗口高度?

javascript - 当光标不在父级上方时隐藏悬停元素

javascript - 获取(可能未应用的)CSS 属性的值

javascript - 创建具有状态图片的用户列表

Python/Selenium - 具有长类名的 find_elements_by_class_name

javascript - 如何从注入(inject)的内容脚本中传递异步操作的结果?