48

我正在尝试让我的 Chrome 扩展程序注入一些 javascript content_scripts,使用这个先前的答案作为参考。

清单.json

"name": "My Chrome Extension",
"version": "1.0",
"manifest_version": 2,
"content_scripts": [{
    "matches": ["http://pagetoinject/script/into/*"],
    "js": ["contentscript.js"]
}]  

内容脚本.js:

var s = document.createElement('script');
s.src = chrome.extension.getURL("script.js");
(document.head||document.documentElement).appendChild(s);
s.parentNode.removeChild(s);

(也试过没有成功的方法。)

var s = document.createElement('script');
s.src = chrome.extension.getURL("script.js");
s.onload = function() {
    this.parentNode.removeChild(this);
};
(document.head||document.documentElement).appendChild(s);

我不断收到这个 javascript 错误。这是一个截图

在此处输入图像描述 GET chrome-extension://invalid/ (anonymous function)

4

5 回答 5

109
  1. 在您的清单文件中,"manifest_version": 2已指定。这会自动激活更严格的模式,默认情况下,所有扩展程序的文件都不可用于网页。
  2. 您的原始代码将永远无法工作,因为该<script>元素在注入后立即被删除(脚本文件没有机会加载)。

由于 1.,控制台中显示以下错误:

Failed to load resource                             chrome-extension://invalid/

要解决此问题,请在您script.js的白名单中添加:"web_accessible_resources"manifest file

{
  "name": "Chrome 扩展程序",
  “版本”:“1.0”,
  “清单版本”:2,
  “内容脚本”:[{
      "匹配": ["http://pagetoinject/script/into/*"],
      “js”:[“contentscript.js”]
  }] ,
   "web_accessible_resources": ["script.js"] 
}
于 2012-05-10T07:54:28.220 回答
1

除了上面的答案,我注意到contentscript.js你只是添加了另一个脚本,即script.js你为什么不直接script.js通过 content_scripts添加manifest.json

于 2017-11-17T12:58:31.663 回答
0

出现此错误的另一个原因是 URL 是否被 CORS 阻止。检查页面的网络请求头是否包含Content-Security-Policy:

Content-Security-Policy: default-src 'self' http://example.com; connect-src http://example.com/; script-src http://example.com/

您可以尝试在新的浏览器选项卡中打开 url 以验证图像 url 是否正确:

chrome-extension://mjcbjlencnokpknflpneebajalcnnifo/images/pattern.jpg

解决此问题的一种方法是使用图像数据 URI:

data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7
于 2019-01-30T17:07:55.750 回答
0

Chrome 扩展的样板:

https://github.com/commanddotcom/boilerplate-chrome-extension-js-injection

于 2021-04-13T17:17:50.930 回答
-4

这里的问题是您正在使用manifest_version : 2. 如果你这样做,manifest-version: 1你不会有任何问题。版本 2 限制了许多此类功能以提高安全性。有关清单版本 2 中施加的限制的更多详细信息,请参阅Google 内容安全政策。我找不到 CSP 中提到的您的具体案例,但是当我将清单版本更改为 1 并执行您的代码时,它工作正常。

于 2012-05-10T08:48:39.470 回答