jsファイル内で、以下のように別のjsファイルを呼び出すようにしたいです。
import data from './itemData.js';
上記はChromeでは動作したのですが、諸事情によりIE10にも対応させる必要があり、
IEはimportに対応していないようで困っています。
IE10でも実装できるimportのような簡単な方法はないでしょうか。。。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
IE10でも実装できるimportのような簡単な方法はないでしょうか
「そんな機能はない」が正解です。
まぁ、対応策はいくつかあるので順番に説明していきます。
IE10は2013年2月26日に登場したブラウザです。
当時はまだJavaScriptに外部ファイルを読み込むという仕様は存在していません。
2015年のES2015という仕様で初めてmodulesという機能が定義されました。
IEは後方互換を重視する文化なのでドラフトで勝手な機能を盛り込んで「やっぱり別の仕様に変更されたからこの書き方は本バージョンだけねメンゴメンゴ」みたいな対応は出来ず取り入れてはいません。
参考資料として、ブラウザ毎の対応機能表を載せておきます。
ES compatibility table
import data from './itemData.js';
上記の理由でIE10やIE11ではimport構文は利用できません。
出来るのはただただ別のscriptタグで生成したモジュールをグローバス変数に格納しておいて、
そのグローバル変数に向かって決め打ちで参照するだけです。
そこでローカルで依存ファイルを全て1ファイルにくっつけてしまえばよくね?
…という発想のライブラリがいくつか登場します。
以下はそういったライブラリの候補です(組み合わせて利用してね)
- Babel: ES2015以降のJSコードをES5準拠のコードに変換する
- Browserify: Common.jsのrequire構文を静的解析し、JSファイルを1つにまとめる、Node.jsの1モジュールとしての側面が強い
- Webpack: JSファイルを静的解析して1つのファイルにまとめる、こちらは単独のコマンドラインツールとしての側面が強い
どうすればいいか?
import構文使いたいってことなので、きっと中身のJSコードはES2015だらけなんでしょうね。
おそらくimport構文が通ったところで焼け石に水で、構文エラーだらけで何も動かないと思います。
従って、BabelでES5準拠のコードに変換してから、BrowserifyかWebpackと併用する形になるでしょう。
まぁ、BabelでJSファイルを変換したタイミングでimport構文はrequire構文に変換されるのでどちらのライブラリを使って1ファイルにまとめても問題ありません。
因みにrequire構文はNode.jsが採用しているCommonJSという名称の思想です。
2009年当時はES2015がなかったので、JSに外部ファイル読み込みの仕様を追加するにはどうすればよいかという議論が行われており、その一つの仕様がCommonJSです。
Node.jsではその思想を活用して、C++でモジュールを作って組み込んでいます。
投稿2018/06/19 03:35
総合スコア21194
0
状況にもよりますが、いくつか方法は考えられます。
- Webpackなどで事前コンパイルを入れて、
import
したあとのJavaScriptを生成しておく方法 <script>
タグを生成することで、動的にJavaScriptを読み込ませる方法
なお、それぞれに利害得失がありますので、どのようなことをしたいかの背景も重要となってきます。
投稿2018/06/19 02:34
総合スコア145930
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
古いブラウザに対応するにはそれなりの代償が必要です
importと等価な作業は難しいですがスクリプトの追加であれば
javascript
1var n=docuemnt.createElement("script"); 2n.setAttribute("src","./itemData.js"); 3n.setAttribute("type","text/javascript"); 4document.getElementsByTagName("head")[0].appendChild(n);
のような処理でいけるでしょう。
ただ、プログラム上からスクリプトを呼び出すのが必須でなけば、
IEかどうかを判断して最初から呼び出しておけばよいような気もしますが・・
投稿2018/06/19 03:37
総合スコア116443
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/27 02:48