Chrome 拡張機能: コンテンツ スクリプトで ES6 モジュールをインポートする
P粉141035089
2023-08-27 22:19:00
<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>
動的 import()
関数を使用します。
chrome
API (
chrome.runtime.sendMessageなど) を含む初期コンテンツ スクリプト。
content_script.js
インポートされたスクリプトをマニフェストのでは、
のようになります。 リーリーWeb Accessible Resources で宣言する必要もあります:
//マニフェストV3リーリー
//マニフェストV2リーリー
詳細についてはこちらをご覧ください:李> ###それが役に立てば幸い。
免責事項
まず、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
内のインポート スクリプトの例: リーリー
これは効きます!エラーも発生せず、満足でした。 :)