发出executeScript权限

时间:2017-08-11 08:45:48

标签: javascript google-chrome-extension permissions

我试图从后台脚本向选定的标签上下文中注入一些代码,但我对权限有一些问题。

的manifest.json

{
  "manifest_version": 2,
  "name": "prova",
  "version": "1.0",
  "permissions": [
    "activeTab"
  ],
  "background": {
    "scripts": ["background.js"],
    "persistent": false
  },
  "content_scripts": [
    {
      "matches": ["https://*"],
      "css": ["mystyles.css"],
      "js": ["myscript.js"]
    }
  ]
}

background.js

chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
    chrome.tabs.executeScript(null,{code:"console.log('Not done!');"});
    sendResponse({});
  });

myscript.js

chrome.runtime.sendMessage({}, function(response) {
    console.log("Done!");
  });

错误出现在后台控制台中:

  

运行tabs.executeScript时未经检查的runtime.lastError:不能   访问页面的内容。扩展清单必须要求   允许访问相应的主机。

我真的很感激每一个建议。 非常感谢。

1 个答案:

答案 0 :(得分:5)

来自Programmatic injection部分:

  

要将代码插入页面,您的扩展程序必须具有该页面的跨域权限。它还必须能够使用chrome.tabs模块。您可以使用清单文件的权限字段获得这两种权限。

这意味着您需要为要运行代码的主机请求许可。 因此,permissions中的manifest.json部分应该像:

"permissions": [
  "tabs",
  "http://*.example.com/",
]

看看host match patterns

编辑1:

我还注意到您使用了content-scriptprogrammatic injection。这两种在选项卡中运行代码的方法几乎完全相同,但方式不同。

    清单中的
  1. content_script部分有助于在与主机模式匹配的每个页面上运行脚本。
  2. 程序注入(PI)也有助于运行代码(文件或字符串)。但是,应该通过清单中的permissions部分设置主机权限。 PI在脚本需要很少运行时使用,而不是在每个页面上运行。