Chrome 拡張機能: コンテンツ スクリプトで ES6 モジュールをインポートする
P粉141035089
P粉141035089 2023-08-27 22:19:00
0
2
588
<p><strong>Chrome 61</strong> では、JavaScript モジュールのサポートが追加されました。現在Chrome 63を実行しています。 </p> <p><code>import</code>/<code>export</code> 構文を使用して、Chrome 拡張機能コンテンツ スクリプトでモジュールを使用しようとしています。 </p> <p>In<strong><code>manifest.json</code></strong>:</p> <pre class="brush:php;toolbar:false;">"content_scripts": [ { "js": [ 「コンテンツ.js」 ]、 } ]</pre> <p>In<strong><code>my-script.js</code></strong> (<strong><code>content.js</code></strong> と同じディレクトリ):</p> <pre class="brush:php;toolbar:false;">'厳密に使用'; const injectFunction = () => window.alert('hello world'); デフォルトの injectFunction;</pre> をエクスポートします。 <p>In<strong><code>content.js</code></strong>:</p> <pre class="brush:php;toolbar:false;">'厳密に使用'; './my-script.js' から injectFunction をインポートします。 injectFunction();</pre> <p>次のエラーが発生します:<strong><code>キャッチされない構文エラー:予期しない識別子</code></strong></p> <p>インポート構文を <code>import {injectFunction} from './my-script.js';</code> に変更すると、次のエラーが発生します: <strong><code>Uncaught SyntaxError : 予期しないトークン {</code></strong>< /p> </p><p>Chrome 拡張機能の <strong><code>content.js</code></strong> でこの構文を使用すると問題はありますか (HTML では <を使用する必要があるため) ;コード> <script type="module" src="script.js "></code> 構文)、それとも何か間違っているのでしょうか? Google が拡張機能のサポートを無視しているのは奇妙に思えます。 </p></script> </code></p>
P粉141035089
P粉141035089

全員に返信(2)
P粉739079318

動的 import() 関数を使用します。

chrome API (chrome.runtime.sendMessage など) を含む初期コンテンツ スクリプト。

content_script.js では、 のようになります。 リーリー

インポートされたスクリプトをマニフェストの

Web Accessible Resources で宣言する必要もあります:

//マニフェストV3

リーリー

//マニフェストV2

リーリー

詳細についてはこちらをご覧ください:

  • Chrome 拡張機能で ES6 の「インポート」を使用する方法
  • Chrome 拡張機能での ES6 インポートの実際の例
  • chrome.runtime.getURL 李> ###それが役に立てば幸い。
いいねを押す +0
P粉797004644

免責事項

まず、2018 年 1 月の時点では、コンテンツ スクリプトはモジュールをサポートしていないことに注意することが重要です。この回避策は、返されたページに module script タグを埋め込むことで、拡張機能の制限を回避します。

これは安全ではない解決策です。

Web スクリプト (またはその他の拡張機能) は、セッター/ゲッター、Object.prototype のプロキシ、およびその他のプロトタイプ 関数やscript 要素内のコードは、デフォルトでコンテンツ スクリプトを実行する安全な分離された JS 環境ではなく、ページの JS コンテキストで実行されるためです。

安全な回避策は、こちらの別の回答 に示されている動的 import() です。

###解決###

これは私の

manifest.json: リーリー

web_accessible_resources

に 2 つのスクリプトがあることに注意してください。 これは私の

content.js: リーリー これにより、

main.js

がモジュール スクリプトとして Web ページに挿入されます。 すべてのビジネス ロジックは

main.js

にあります。 このメソッドが機能するには、

main.js

(および インポートするすべてのスクリプト) マニフェストの web_accessible_resources に配置されている必要があります 使用例: my-script.js

リーリー main.js

内のインポート スクリプトの例: リーリー これは効きます!エラーも発生せず、満足でした。 :)

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート