当它适用于弹出页面时,无法从后台页面注入代码

时间:2017-12-28 15:36:51

标签: google-chrome google-chrome-extension

我在manifest.json中拥有以下权限:

"permissions": [
  "*//*/*",
  "http://*/",
  "https://*/",
  "activeTab",
  "tabs",
  "storage",
  "bookmarks"
]

我仍然不能从后台页面executeScript,但不知何故它可以从弹出页面工作。我收到以下错误:

  

运行tabs.executeScript时未经检查的runtime.lastError:无法访问网址“https://github.com/NeilLi1992/LightMarker/blob/master/js/background.js”的内容。扩展清单必须请求访问此主机的权限。       在chrome-extension://aciimkfhggbanpmpngahlofjocidjfko/src/js/background.js:152:29

我尝试在权限部分对https://github.com/进行硬编码,但仍无效。

我在后台页面的DevTools中测试了这段代码:

chrome.tabs.executeScript(728, { code: "alert(123);" });

728就是我在创建选项卡时记录的tabId,因此它是有效的。

我从后台devtools得到了上述错误。但是当我从popup的devtools中做到这一点时,它工作正常。

4 个答案:

答案 0 :(得分:1)

这将起作用:

修改manifest.json

"permissions": [
  "*://*/_generated_background_page.html"
]

答案 1 :(得分:0)

正如您已经发现*//*/*是一个无效的跨域权限。请改用这样的东西。

  "permissions": [
    "https://*/*",
    "http://*/*",
    "tabs"
  ]

或提供更窄范围的权限。

  "permissions": [
    "https://*/*",
    "http://*/*",
    "activeTab"
  ]

有关程序化注射的进一步阅读:https://developer.chrome.com/extensions/content_scripts#pi

答案 2 :(得分:0)

请不要加载远程文件,请下载项目中的相关文件,然后尝试执行。

执行此操作后仍然无效,请在manifest.json中的web_accessible_resources属性中添加文件引用,以获取更多参考https://developer.chrome.com/extensions/manifest/web_accessible_resources

答案 3 :(得分:0)

感谢您的其他答案。但它们似乎不起作用。

我试图提供相当多的许可,我多次阅读程序化注入页面,但仍然无法获得执行代码的后台页面。

最后我放弃了并转向内容脚本,这些脚本无痛苦地工作。现在我从内容脚本中打开一个端口,并与后台页面进行通信,为内容脚本准备必要的信息。

万一其他人在挣扎,content scripts似乎是你的救援。