[解決済み] Chrome ExtensionのコンテンツスクリプトでES6モジュールをインポートする方法
質問
質問 クローム 61 で、JavaScript のモジュールのサポートが追加されました。現在、私はChrome 63を使用しています。
を使おうとしています。
import
/
export
の構文は、Chrome拡張コンテンツのスクリプトで、モジュールを使用するために使用します。
で
manifest.json
:
"content_scripts": [
{
"js": [
"content.js"
],
}
]
で
my-script.js
(同じディレクトリに
content.js
):
'use strict';
const injectFunction = () => window.alert('hello world');
export default injectFunction;
で
content.js
:
'use strict';
import injectFunction from './my-script.js';
injectFunction();
このようなエラーが発生します。
Uncaught SyntaxError: Unexpected identifier
もし、インポート構文を
import {injectFunction} from './my-script.js';
このようなエラーが発生します。
Uncaught SyntaxError: Unexpected token {
でこの構文を使用することに何か問題がありますか?
content.js
を使用することに何か問題があるのでしょうか(HTMLでは
<script type="module" src="script.js">
の構文が必要なので)、それとも私が何か間違ったことをしているのでしょうか?Googleが拡張機能のサポートを無視するのはおかしいと思うのですが。
どのように解決するのですか?
私は何とか 回避策 .
免責事項
まず最初に言っておきたいのは、2018年1月現在、コンテンツスクリプトはモジュールに対応していないということです。このワークアラウンドは、モジュール
script
タグを、拡張機能に戻るページに埋め込むことで制限を回避します。
回避策
これは私の
manifest.json
:
"content_scripts": [ {
"js": [
"content.js"
]
}],
"web_accessible_resources": [
"main.js",
"my-script.js"
]
の中に二つのスクリプトがあることに注意してください。
web_accessible_resources
.
これは私の
content.js
:
'use strict';
const script = document.createElement('script');
script.setAttribute("type", "module");
script.setAttribute("src", chrome.extension.getURL('main.js'));
const head = document.head || document.getElementsByTagName("head")[0] || document.documentElement;
head.insertBefore(script, head.lastChild);
これは
main.js
をモジュールスクリプトとしてウェブページに挿入します。
すべてのビジネスロジックは
main.js
.
このメソッドが動作するために
main.js
(というスクリプトが必要です。
import
)
は
である
web_accessible_resources
でなければなりません。
使用例。
my-script.js
'use strict';
const injectFunction = () => window.alert('hello world');
export {injectFunction};
そして
main.js
は、スクリプトをインポートする例です。
'use strict';
import {injectFunction} from './my-script.js';
injectFunction();
これでうまくいきました。エラーも出ませんし、満足です :)
関連
-
[解決済み] JavaScriptのオブジェクトが空であることをテストするにはどうすればよいですか?
-
[解決済み] JavaScriptで空文字列/未定義文字列/null文字列をチェックするにはどうすればよいですか?
-
[解決済み] ウェブサイト制作のためのChromeキャッシュの無効化
-
[解決済み] ES6インポートで中括弧を使用するのはどのような場合ですか?
-
[解決済み】Node.jsのrequireとES6のimport/exportを使い分ける。
-
[解決済み] 文字列のn番目の出現箇所を取得するには?
-
[解決済み] JavaScriptを使用してHTML要素に属性を追加/更新するには?
-
[解決済み] JavaScriptでの大文字小文字を区別しない正規表現
-
[解決済み] JavaScript のオブジェクトの配列を比較し、最小値/最大値を取得する
-
[解決済み] Chrome拡張機能:popup.htmlを強制終了させる
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JavaScriptで次の要素/前の要素を取得しますか?
-
[解決済み] 配列からオブジェクトを生成する
-
[解決済み] Node.jsでbase64エンコードされた画像をAmazon S3へアップロードする
-
[解決済み] URL/アドレスバーからJavascriptの関数を呼び出す
-
[解決済み] アサインの左側にJavascriptのオブジェクトブラケット表記({ ナビゲーション } =)があります。
-
[解決済み] JavaScriptでの大文字小文字を区別しない正規表現
-
[解決済み] JavaScriptでjson-objectのキーを取得する [重複].
-
[解決済み] 各オブジェクトに?重複
-
[解決済み] JSHintの'+'前の改行不良の説明
-
[解決済み] javascriptでオプションのパラメータを扱う