たとえば、ゲームを作成しているとします。私は、すべてのアセットをロードし、アセットがロードされている間にプログレスバーをユーザに提示するという小さなスクリプトを持っています。<script>のダウンロードの進捗状況を取得するにはどうすればよいですか?
このような資産の1つは、ゲームロジックを含む比較的大きなスクリプトです。おそらく3MB以上です。
2番目のスクリプトの読み込みの進行状況をユーザーに表示するにはどうすればよいですか?
たとえば、ゲームを作成しているとします。私は、すべてのアセットをロードし、アセットがロードされている間にプログレスバーをユーザに提示するという小さなスクリプトを持っています。<script>のダウンロードの進捗状況を取得するにはどうすればよいですか?
このような資産の1つは、ゲームロジックを含む比較的大きなスクリプトです。おそらく3MB以上です。
2番目のスクリプトの読み込みの進行状況をユーザーに表示するにはどうすればよいですか?
<script>
タグのみ火災load
とerror
イベント;彼らはprogress
イベントを起動しません。しかし、現代のブラウザでは、Ajax requests do support progress
eventsです。あなたのスクリプトの内容をロードするとAjaxによる進行状況を監視して、負荷が完了したときに新しい<script>
要素にスクリプトの内容を置くことができます。
var req = new XMLHttpRequest();
// report progress events
req.addEventListener("progress", function(event) {
if (event.lengthComputable) {
var percentComplete = event.loaded/event.total;
// ...
} else {
// Unable to compute progress information since the total size is unknown
}
}, false);
// load responseText into a new script element
req.addEventListener("load", function(event) {
var e = event.target;
var s = document.createElement("script");
s.innerHTML = e.responseText;
// or: s[s.innerText!=undefined?"innerText":"textContent"] = e.responseText
document.documentElement.appendChild(s);
s.addEventListener("load", function() {
// this runs after the new script has been executed...
});
}, false);
req.open("GET", "foo.js");
req.send();
アヤックスprogress
をサポートしていない古いブラウザの場合は、あなたがあなたのを構築することができます進捗報告UIを使用して、最初のprogress
イベントの後にローディングバーを表示します(そうでなければ、progress
イベントが発生しない場合は一般的なスピナーを表示します)。
あなたはそれがAJAXのダウンロードのステータスを確認することですHow to show loading status in percentage for ajax response?
を見ているのが好きかもしれません。スクリプトをロードするので、ファイルを取得する最善の方法ではないかもしれませんが、それは動作する可能性があります。次に、ajax呼び出しで受け取ったコンテンツをどこかに置く必要があり、evalはお勧めできません。
これは 'eval'のための受け入れ可能なユースケースのようです。あなたはそれを推薦しないという実際の理由がありますか、それともちょっと言っていますか? – andrewrk
'eval'はこのようなことをするために作られました。 'eval'が推奨されていない唯一の時は、それが必要でないか、大きなセキュリティリスクです。これがセキュリティ上のリスクになる可能性がある唯一の方法は、man-in-the-middle攻撃か、侵入されたサーバーです。どちらも、evalよりも大きなリスクをもたらします。 – h2ooooooo
あなたが本当に必要な場合を除き、私はいつもevalを使わないように言われました...そうかもしれません。 requireJSと同じように、スクリプトタグの注入もできますか?evalを使用しない理由が必要ですか? – Salketer
[requirejsスクリプトの進捗状況](http://stackoverflow.com/questions/15581563/requirejs-load-script-progress)( "RequrieJsはDOMに新しいスクリプトタグを作成してモジュールをロードし、 * ") – apsillers
これはブラウザーのことであり、プログラマーとしてのコントロールではありません。ブラウザがJSファイルの読み込みと "コンパイル"を完了したときにのみアクセスできます。私が見ることができる唯一の方法は、複数の小さなファイルを使用してそれらの間でロジックを分割することです。 –