<strong>HTML 4.01 スクリプト属性</strong> <br>charset: オプション。 src によって導入されるコードの文字セットを指定します。ほとんどのブラウザはこの値を無視します。 <br>defer: ブール値、オプション。スクリプトの実行を遅らせることは、ページの body タグの下部に script タグを配置することと同じであり、js スクリプトはドキュメントの DOMContentLoaded の前に実行されます。 IE および Firefox の新しいバージョンを除き、他のブラウザはサポートされていません。 <br>言語: 非推奨になりました。ほとんどのブラウザはこの値を無視します。 <br>src: オプション。サフィックス名を制限せずにインポートする外部コードファイルを指定します。 <br>タイプ: 必須。スクリプトのコンテンツタイプ(MIMEタイプ)を指定します。実際には、通常、この値を指定する必要はありません。ブラウザはデフォルトで text/javascript タイプとして解釈して実行します。 HTML5 の <br><br><strong>script 属性 </strong>: 新しい HTML5 標準で定義された属性に加えて、HTML5 の <br>script タグは、HTML4.01 と比較して language 属性を削除して変更しました。 type 属性はオプション (デフォルトは text/javascript) で、新しい属性 async が追加されます。 <br>async: 属性の役割であるブール値は、スクリプトが非同期で実行されるかどうかを定義します。値は true または false です。 <br>async が true に設定されている場合、defer 属性は無視されます。 <br>非同期で実行される js ファイルは、読み込むドキュメントにコンテンツを書き込むために document.write() を使用しないと想定されているため、非同期で実行される js ファイルの読み込みおよび実行中に document.write() を使用しないでください。<br>例外は次のとおりですscript タグ属性に追加すると、ページが js ファイルを導入する方法がその読み込みと実行モードに影響します。<br>スクリプト ノード (appendChild(scriptNode) など) を追加することによって導入されたすべての js ファイルは非同期で実行されます (scriptNode を挿入する必要があります)ノードを作成して src を設定するだけでは、js ファイルはロードされません。これは、img のプリロードとは異なります) <br>HTML ファイルの <script> タグ内のコードまたは js 内のコードsrc によって参照されるファイルは同期的にロードされ、実行された <br>html ファイルの <script> タグ内のコードは、 document.write() メソッドを使用して、<script> の src 属性によって参照される js ファイルを導入します。非同期的に実行される <BR>html ファイル内の ; タグ。 js ファイルのコード内で document.write() メソッドを使用して導入された js ファイルが同期的に実行されます。 <BR>Image オブジェクトを使用して、js ファイルを非同期的にプリロードします (実行されません) <br><br>次のようなものは使用しないでください。このメソッドは、js ファイルをロードするリクエストを開始しません: <BR>divNode.innerHTML = '<script src="xxx.js"> ;</script>'; <br>window.onload イベントは、ファイルがロードされた後にのみ実行されます (非同期でロードされた場合でも) <br>============ =========================================== <br>1. ><script> <br>// 実行されたコードを同期的にロードします <br></script> <br> 2. <br><script src="xx.js"></script> xx.js <br>3. <br><script><BR>document.write('<script src="xx.js"></script>'); のコードを同期的にロードして実行します。 //xx.js <BR></script> <BR>4, <BR> <script src="xx.js"></script> <BR>xx のコードを非同期的にロードして実行します。 js には次のコードが含まれています: <BR><BR><div class="codetitle"><span><a style="CURSOR: pointer" data="11315" class="copybut" id="copybut11315" onclick="doCopy('code11315')">コードをコピー<U> コードは次のとおりです: <div class="codebody" id="code11315">document.write ('<script src="11.js"></script>'); <BR>document.write('<script src="22.js"></script>'); <BR><BR> その後、xx.js、11.js、および 22.js がすべて同期的に読み込まれ、実行されます。 <BR>スクリプト ノードの挿入によって xx.js、11.js、および 22.js が非同期的に読み込まれる場合、11.js と 22.js は非同期的に読み込まれます。<BR>スクリプト ノードの挿入によって xx.js が非同期的に読み込まれる場合、 11.js と 22.js は document.write(script) モードでロードされ、次に 11.js と 22.js は同期的にロードされます (最新のブラウザーでテストされています。Chrome では、xx.j の非同期ロード実行は行われなくなりました)利用可能な document.write() はコンテンツをドキュメントに書き込みますが、Firefox と IE はドキュメントが閉じる前に書き込むことができます (メソッドは HTML でアラートを使用してドキュメントが閉じないようにします)) <BR>テスト: 11 のalert() .js (for ループは使用しないでください。ブラウザは単一のスレッドで実行され、コードの一部の実行を続けると残りのコードがブロックされます)、22.js の console.log()、 22.js のコードがブロックされていることがわかります<BR> 5. <BR>次のメソッドでは、appendChild の実行後に xx.js がロードされ、非同期で実行されます <BR><BR><div class="codetitle"><span><a style="CURSOR: pointer" data="3029" class="copybut" id="copybut3029" onclick="doCopy('code3029')">コードをコピーします <U> コードは次のとおりです: <div class="codebody" id="code3029">var script = document.createElement("script"); <BR>script.setAttribute("src") ","xx.js"); <BR>documentrt.getElementsByTagName("head") [0].appendChild(script); <BR><BR><BR>6. Image オブジェクトを使用して js ファイルを非同期的にプリロードします (実行されません) <BR>リクエストは、イメージの src が割り当てられたときに開始され、ファイル タイプは選択されません (イメージは動的に指定される場合もあります)検証コードなどのスクリプトによって作成されるため、js ファイルの URL を image.src に割り当てることができます。js はロード後にブラウザーによってキャッシュされます。<BR><div class="codetitle"><span><a style="CURSOR: pointer" data="81003" class="copybut" id="copybut81003" onclick="doCopy('code81003')">。 <U>コードをコピー コードは次のとおりです: <div class="codebody" id="code81003"> <BR>var img = new Image(); <BR>img.onload = function(){alert( 1); }; //返された js ファイル MIME は画像ではないため、onload コールバック関数はトリガーされません <BR>img.src = 'http://localhost/test/loadjs/try.2.js' ; <BR>var s = document.createElement("script"); <BR>var h = document.getElementsByTagName("head")[0]; <BR>//js <BR>s.src=img を実行します。 src; <BR>h.appendChild(s); <BR> <BR>js ファイルをロードする関数: <BR><div class="codetitle"><span><a style="CURSOR: pointer" data="20524" class="copybut" id="copybut20524" onclick="doCopy('code20524')"><U>コードをコピーします コードは次のとおりです。 <div class="codebody" id="code20524"> <BR>varloadJS = function(url,callback){ <BR>var head = document.getElementsByTagName('head'); <BR>if(head&&head); .length){ <BR>head = head[0]; <BR>}else{ <BR>head = document.body; <BR>var script = document.createElement('script'); >script.src = url; <BR>script.type = "text/javascript"; <BR>head.appendChild(script); <BR>script.onload = script.onreadystatechange = function(){ <BR>//スクリプト タグ、IE には onreadystatechange イベントがあり、w3c 標準には onload イベントがあります <BR>//これらの readState は IE8 以下用です。W3C 標準のスクリプト タグには onreadystatechange がなく、<BR>//Onload はありません。ファイルが正常にロードされなかった場合に実行されます。<BR>//(!this.readyState) は W3C 標準用です。IE 9 は W3C 標準の onload <BR>if ((!this.readyState) || this.readyState もサポートします。 == "完了" || this.readyState == "ロード済み" ){ <BR>callback(); <BR>} <BR>}//end onreadystatechange <BR>} <BR><BR> <BR>ポイント 4 のテスト (同期読み込み) (アラートを挿入すると、読み込み中のブロックを簡単に確認できます) tryjs .html <BR><BR><BR><div class="codetitle"><span>コードをコピー <a style="CURSOR: pointer" data="1961" class="copybut" id="copybut1961" onclick="doCopy('code1961')"><U> コードは次のとおりです: <!DOCTYPE html> <div class="codebody" id="code1961"><head> <BR><meta http-equiv= Content-Type" content="text/html" /> <BR><script src=" tryjs.js" <BR>onload="if(!document.all){console.log] ('outer js callback, not IE');}" <BR>onreadystatechange="console.log('outer js callback ', this.readyState,' IE');"></script> <BR>< ;body> <BR></body> <BR><BR> <BR>tryjs <BR><BR><BR><BR> ><div class="codetitle"><span> コードは次のとおりです: <a style="CURSOR: pointer" data="84207" class="copybut" id="copybut84207" onclick="doCopy('code84207')"><U> console.log('write begin'); document.write('<script src="try.1. js" onreadystatechange="console.log('ファイル 1 コールバック ',this.readyState,' IE');" onload="if(!document .all){console.log('ファイル 1 コールバック,NOT IE '); }"></script>'); document.write('<script src="try.2.js" onreadystatechange="console.log('file 2 callback ',this.readyState,' IE');" onload="if(!document.all){console.log('file 2 callback,NOT IE ');}" ></script>'); console.log('書き込み完了'); <div class="codebody" id="code84207"><BR> <BR>try.1.js <BR><BR><BR><BR>コードをコピー<BR><div class="codetitle"><span> コードは次のとおりです:<a style="CURSOR: pointer" data="10911" class="copybut" id="copybut10911" onclick="doCopy('code10911')"><U> console.log('loadjs 1 begin'); console.log('loadjs 1 終了'); <div class="codebody" id="code10911">try.2.js <BR><BR><BR><BR>コードをコピーします<BR><div class="codetitle"><span> コードは次のとおりです:<a style="CURSOR: pointer" data="30801" class="copybut" id="copybut30801" onclick="doCopy('code30801')"><U> console.log('loadjs 2 begin') ; console.log('loadjs 2 が完了しました');<BR>テスト結果 (IE789 ではファイル 2 とファイル 1 のコールバック完了の順序は不明) <BR>IE 7: <BR>ログ: 外部 js コールバックの読み込み IE <BR>ログ: 外部 js コールバックの読み込み IE <BR>ログ:書き込み開始 <BR> ログ:書き込み終了 <BR> ログ:外部 JS コールバック完了 IE <BR> ログ:ファイル 1 コールバック読み込み IE <BR> ログ:ファイル 2 コールバック読み込み IE <BR> ログ:loadjs 1 開始<BR>ログ:loadjs 1 完了 <BR>ログ:loadjs 2 begin <BR>ログ:loadjs 2 完了 <BR>ログ:ファイル 2 コールバック完了 IE <BR>ログ:ファイル 1 コールバック完了 IE <br><br> IE8: <BR>ログ: 外部 js コールバックのロード IE <BR>ログ: 外部 js コールバックがロードされた IE <BR>ログ: 書き込み開始 <BR>ログ: 書き込み終了 <BR>ログ: 外部 js コールバック完了 IE <BR>ログ: ファイル 1 コールバックの読み込み IE <BR> ログ: ファイル 2 コールバックの読み込み IE <BR> ログ:loadjs 1 開始 <BR> ログ:loadjs 1 終了 <BR> ログ:loadjs 2 開始 <BR> ログ:loadjs 2 終了 <BR> ログ: ファイル 2 コールバック完了 IE <BR> ログ: ファイル 1 コールバック完了 IE <br><br>IE9: <BR> ログ: 書き込み開始 <BR> ログ: 書き込み完了 <BR> ログ: 外部 JS コールバック完了 IE <BR>ログ: ファイル 1 コールバックの読み込み IE <BR>ログ: ファイル 2 コールバックの読み込み IE <BR>ログ:loadjs 1 開始 <BR>ログ:loadjs 1 終了 <BR>ログ:loadjs 2 開始 <BR>ログ:loadjs 2 終了 <BR>ログ: ファイル 1 コールバック完了 IE <BR>ログ: ファイル 2 コールバック完了 IE <br><br>FIREFOX: <BR>書き込み開始 <BR>書き込み完了 <BR>IE ではなく外部の JS コールバック <BR>loadjs 1 開始 <BR>loadjs 1 終了 <BR>ファイル 1 コールバック、IE ではありません <BR>loadjs 2 開始 <BR>loadjs 2 終了 <BR>ファイル 2 コールバック、IE ではありません <br><br>CHROME: <BR> 書き込み開始 <BR>書き込み完了 <BR>IE ではなく外部 js コールバック <BR>loadjs 1 開始 <BR>loadjs 1 終了 <BR>ファイル 1 コールバック、IE ではありません <BR>loadjs 2 begin <BR>loadjs 2終了した <BR> ファイル 2 コールバック、IE ではありません</script>