4

拡張機能をマニフェスト バージョン 1 からバージョン 2 に移植しようとすると、次のように表示されました。

ポート エラー: 接続を確立できませんでした。受信側が存在しません。chromeHidden.Port.dispatchOnDisconnect その他のバインディング:232

これは、開発者ツールのコンソールに表示されました。そもそも何が原因なのかわからないため、どこから修正を開始すればよいかわかりません..

この問題の原因は何ですか?何が原因なのかを正確に知る方法はありますか?ありがとう。

4

2 に答える 2

10

失敗の最も可能性の高い原因は、がアクティブなときにデフォルトのコンテンツセキュリティポリシー"manifest_version": 2がアクティブ化されることです。デフォルトのCSPの結果は、インラインJavaScriptが実行されないことです。

<script>chrome.extension.onConnect.addListener(...);</script>

前の行はインラインコードの例です。解決策は、スクリプトを外部JSファイルに配置することです。

<script src="script.js"><!--original contents moved to script.js--></script>

背景ページ/スクリプト

バックグラウンドページを使用していた場合は、以下を使用 しないでください。

  • "background_page": "background.htm"、 また
  • "background": {"page": "background.htm"}
    しかし
  • "background": {"scripts": ["background.js"]}
    ここには、のタグbackground.js内に最初に配置されたスクリプトが含まれています。<script>background.htm

インラインイベントリスナー

ブラウザアクションポップアップ、アプリランチャー、オプションページなどには、多くの場合、インラインイベントリスナーが含まれています。CSPにより、これらも禁止されています。

<button onclick="test();"> 動作しません。解決策は、を使用して外部JSファイルにイベントを追加することですaddEventListener例については、ドキュメントまたはこの回答を参照してください。

他の

  • eval文字列( 、、、、...)からのJavaScriptの作成は禁止されていFunctionます。setTimeout文字列からコードを作成しないようにコードを書き直すか、サンドボックスマニフェストオプション(Chrome 21で導入)を使用します。Chrome 22以降unsafe-evalCSPポリシーを使用してこの制限を解除できます。
  • 外部(JavaScript)リソースを拡張機能のコンテキストにロードできないため、JSONPは機能しません。XMLHttpRequestJSONPの代わりに通常のものを使用してください(詳細情報+例)。
    唯一の例外は、リソースがhttpshttpではなくフェッチされる場合です。CSPは、この例外を導入するように調整できます。ドキュメントを参照してください。

    "content_security_policy": "script-src 'self' https://example.com; object-src 'self'",
    

公式ドキュメント

公式ドキュメントには、このトピックに関する優れた説明も記載されています。「チュートリアル:マニフェストV2への移行」を参照してください。

于 2012-08-11T12:41:15.780 に答える