【问题标题】:issues executeScript permission发出执行脚本权限
【发布时间】:2018-01-19 17:00:33
【问题描述】:

我正在尝试从后台脚本将一些代码注入到选定的选项卡上下文中,但我遇到了一些权限问题。

ma​​nifest.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:不能 访问页面的内容。扩展清单必须请求 访问相应主机的权限。

我非常感谢每一个建议。 非常感谢。

【问题讨论】:

标签: javascript google-chrome-extension permissions


【解决方案1】:

来自Programmatic injection部分:

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

这意味着您需要为要运行代码的主机申请许可。 所以,manifest.json 中的 permissions 部分应该是这样的:

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

看看host match patterns

编辑 1:

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

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

【讨论】:

  • 我将权限修改为: "permissions": [ "tabs", "", ] 但仍然出现错误。我不知道如何解决这个问题
  • 我只使用编程注入来访问页面上下文并拦截 xhr 调用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多