48

content_scriptsこの以前の回答を参照として使用して、Chrome拡張機能にjavascriptを挿入しようとしています。

マニフェスト.json

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

contenscript.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が指定されています。これにより、より厳格なモードが自動的に有効になり、デフォルトでは、すべての拡張機能のファイルが Web ページで利用できなくなります。
  2. <script>挿入後すぐに要素が削除されるため、元のコードは機能しません (スクリプト ファイルを読み込む機会がありません)。

1.の結果、コンソールに以下のエラーが表示されます。

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

script.jsこの問題を解決するには、ホワイトリストに以下を追加し"web_accessible_resources"てくださいmanifest file:

{
  "名前": "Chrome 拡張機能",
  "バージョン": "1.0",
  "manifest_version": 2,
  "content_scripts": [{
      "マッチ": ["http://pagetoinject/script/into/*"],
      "js": ["contentscript.js"]
  }] ,
   "web_accessible_resources": ["script.js"] 
}
于 2012-05-10T07:54:28.220 に答える
-4

ここでの問題は、 を使用していることですmanifest_version : 2。それをしておけばmanifest-version: 1何の問題もありません。バージョン 2 では、セキュリティを向上させるために、このような機能の多くが制限されています。マニフェスト バージョン 2 に課せられた制限の詳細については、Google コンテンツ セキュリティ ポリシーを参照してください。CSP で言及されている特定のケースを見つけることができませんでしたが、マニフェスト バージョンを 1 に変更してコードを実行すると、正常に動作しています。

于 2012-05-10T08:48:39.470 に答える