問題タブ [dynamic-script-loading]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - JavaScript スクリプトの動的スクリプトの読み込み IE6 の問題
社内のカスタム ライブラリを使用して jsonp 呼び出しを複製しています。JQueryやその他のライブラリを使用するように頼まれる前に、いくつかの制約のために使用できないことを教えてください.
以下は、リクエストを行うために使用されるコードです。
これは、最初に実行されたときに機能します。後続の実行では、リクエストは行われますが、コールバックは実行されません。
以下のように sleep メソッド (コードでコメント) を使用すると、コールバックは後続の呼び出しでも実行されます。
スリープはコールバックの実行にどのように影響しますか? ただし、Firefoxでは正常に動作します。
javascript - 動的スクリプトの追加を注文する必要がありますか?
<script>
ページの読み込み後に、head要素に動的にいくつかのタグを追加しています。スクリプトが非同期で読み込まれることは理解していますが、追加された順序で解析されることを期待できますか?
Firefoxで期待される動作が見られますが、SafariやChromeでは見られません。Chrome開発者ツールとFirebugでドキュメントを見ると、どちらも次のように表示されます-
ただし、リソース読み込みビューを見ると、chromeはサーバーから最初に返された方を解析しているように見えますが、firebugは、Bがサーバーから最初に返された場合でも、スクリプトタグが追加された順序で常にそれらを読み込みます。
Chrome / Safariが指定された順序でファイルを解析することを期待する必要がありますか?OSX10.6.3でChrome5.0.375.29ベータ版を使用する
編集(10/5/10):私が解析と言うとき、私は実行することを意味します-積極的な解析の多くの利点を見ることができます-thx rikh
編集(11/5/10):わかりました。それでは、以下のjuandopazoによるテストをまとめました。しかし、私は以下を含むものの組み合わせを追加しました
- javascriptを使用してスクリプト要素をヘッドに直接追加します。(テストA-> D)
- jqueryのappend()メソッドを使用してスクリプト要素をヘッドに追加します。(テストE-> H)
- jqueryのgetScript()メソッドを使用してスクリプトを「ロード」します。(テストI-> L)
また、スクリプトタグの「async」属性と「defer」属性のすべての組み合わせを試しました。
ここからテストにアクセスできます-http://dyn-script-load.appspot.com/、およびソースを表示して、テストがどのように機能するかを確認します。ロードされたスクリプトは、update()関数を呼び出すだけです。
最初に注意することは、上記の1番目と3番目のメソッドのみが並行して動作することです。2番目はリクエストを順番に実行します。あなたはここでこれのグラフを見ることができます-
画像1-リクエストライフサイクルの
グラフリクエストライフサイクルグラフhttp://dyn-script-load.appspot.com/images/dynScriptGraph.png
jqueryのappend()アプローチがgetScript()呼び出しもブロックすることも興味深いです。すべてのappend()呼び出しが完了するまで実行されないことがわかります。その後、すべてが並行して実行されます。これに関する最後の注意点は、jQueryのappend()メソッドは、スクリプトタグが実行されると、ドキュメントヘッドからスクリプトタグを削除するように見えることです。最初の方法のみがスクリプトタグをドキュメントに残します。
Chromeの結果
その結果、テストに関係なく、Chromeは常に最初に返されるスクリプトを実行します。これは、jQueryのappend()メソッドを除くすべてのテストが「失敗」することを意味します。
画像2-Chrome5.0.375.29ベータ結果
Chromeの結果http://dyn-script-load.appspot.com/images/chromeDynScript.png
Firefoxの結果
ただし、Firefoxでは、最初の方法が使用され、非同期がfalse(つまり設定されていない)の場合、スクリプトは確実に順番に実行されるようです。
画像3-FF3.6.3結果
FF結果http://dyn-script-load.appspot.com/images/ffDynScript.png
SafariはChromeと同じようにさまざまな結果をもたらすように見えることに注意してください。これは、理にかなっています。
また、開始->終了時間を短縮するために、遅いスクリプトでは500ミリ秒の遅延しかありません。ChromeとSafariがすべてで失敗するのを確認するには、数回更新する必要がある場合があります。
これを行う方法がなければ、データを並行して取得する機能を利用していないように思われます。また、(Firefoxが示すように)そうすべきでない理由はありません。
javascript - なぜjQueryがロードされないのですか?
importjs() タイプの関数 (例については以下を参照) を使用する場合、jQuery はそれに続くコードの前にロードされていないようです。
サンプルの html ファイルを次に示します。
上記のコードでは、アラートが正常に発生するはずです。
次に、最初のスクリプト ブロック、つまり jQuery を明示的にロードするスクリプト ブロックをコメント アウトし、2 番目のスクリプト ブロックの importjs(f1) 行のコメントを外します。今回は、少なくとも firefox と safari ではアラートは発生しません。
ここで、「var $j=jQuery」行の前に追加のアラートを挿入します。私にとっては、待ち時間に関係なく、両方のブラウザーで機能します。setTimeout もおそらくうまくいくでしょうが、このようなプログラムを作成する理想的な方法でもありません。
javascript がシングルスレッドの場合、importjs が失敗するのはなぜですか? importjs によって作成された新しい要素が最初のブロックが終了するまで「実行」されないためですか、それとも新しい要素が作成されるとすぐに実行されるべきですか?
javascript - クライアントスクリプトブロックサーバー側(asp.net)を無効にする方法
jsスクリプトブロック(請求書ページの編集機能を実行する非常に長いもの)があります。
サーバー側でこの機能を有効/無効にしたい。最初に頭に浮かんだのは、タグにrunat = "server"と言って、visible = true / falseをasp.netに設定することでした。これは、asp.netが非表示アイテムのHTMLをレンダリングしないため、ブロックがまったくロードしない、それが私が欲しかったものでした。しかし、私はすぐに、クライアント側のコードにrunat="server"と言うのは本当に悪い考えだと気づきました:)
クライアント側からスクリプトをロードする以外に、どのようなオプションがありますか。Cuz私はサーバーから来る他のボタンを持っています-それは死ぬことも可能にします...私がそれらのためにjsを使うならばコードは醜いでしょう...事前に感謝します