导入
/ ** * loadコマンドのノードを作成します。ブラウザのENVSでのみを使用。 * / req.createNode =関数(設定、moduleNameの、URL){ VARノード= config.xhtml? document.createElementNS( 'http://www.w3.org/1999/xhtml'、 'HTML:スクリプト'): のdocument.createElement( 'スクリプト'); node.type = config.scriptType || 'テキスト/ javascriptの'; node.charset = 'UTF-8'; node.async =はtrue。 ノードを返します。 }。
ロード
/ ** *ブラウザのケースのためのモジュールをロードするための要求を行います。 *この他の環境ができるようにする別の関数作り 、それを上書きします*。 * * @param {オブジェクト}コンテキストザ状態を見つけるためにコンテキストを必要とします。 * @param {文字列}モジュールの名前をMODULENAME。 * @param {オブジェクト}モジュールのURLをURL。 * / req.load =関数(コンテキスト、moduleNameの、URL){ VARの設定=(コンテキスト&& context.config)|| {}、 ノード。 {(isBrowser)場合 ブラウザで//そうスクリプトタグの使用 ノード= req.createNodeを(設定、moduleNameの、URL)。 node.setAttribute( 'データrequirecontext'、context.contextName)。 node.setAttribute( 'データrequiremodule'、moduleNameの)。 //ロード・リスナーを設定します。テストattachEvent最初のIE9は持っているので 、//そのaddEventListenerをの微妙な問題であり、スクリプトのonloadの発射 を持つ他のすべてのブラウザの動作が一致しない// のためのonloadイベントを発生// addEventListenerをサポート、 右のスクリプトの後に//スクリプトを実行。参照: //https://connect.microsoft.com/IE/feedback/details/648057/script-onload-event-is-not-fired-immediately-after-script-execution //残念ながらOperaはattachEventを実装していませんが、スクリプトに従ってください //スクリプトの実行モード。 ! もし(node.attachEvent && node.attachEventが人為的にカスタムスクリプトまたはで追加された場合//チェック ネイティブブラウザでサポートされている// https://github.com/jrburke/requirejs/issues/187読ん// 私たちは、その後、[ネイティブコード]を見つけることができない場合//それがネイティブにサポートされていない必要があります。 // IE8で、node.attachEventはのtoString()がありません ://参照、無閉じ括弧付き「[ネイティブコード」のためのテストを注意してください //https://github.com/jrburke/requirejs/issues/273 ! (node.attachEvent.toString && node.attachEvent.toString()のindexOf( '[ネイティブコード')<0)&& //おそらくIE。IE(少なくとも6-8)は発生しません //スクリプトので、右のスクリプトを実行した後のonload //私たちは、匿名の名前への呼び出しを定義結びつけることはできません。 //しかし、IEは「インタラクティブ」であるとスクリプトをレポート 定義コールの時に// readyStateの。 useInteractive =はtrue。 node.attachEvent( 'onreadystatechangeに'、context.onScriptLoad)。 //キャッチするために、ここでエラーハンドラを追加するために素晴らしいことだ // IE9 +で404エラーを。しかし、onreadystatechangeには、前に発火する ことが助けにはならないので、エラーハンドラを//します。addEventListenerをした場合 //使用され、その後、IEは負荷前にエラーが発生しますが、私たちがすることはできません // connect.microsoft.com問題与えられたその経路を使用 「実行スクリプトやってないことについて上記//を 実行する前に、スクリプトのロードイベントリスナを起動後、// 他のブラウザを行うことを//次のスクリプト」を。 //ベスト希望:IE10は、問題を修正 //して、IE 6-9のすべてのインストールを破壊します。 //node.attachEvent('onerror」、context.onScriptError)。 }他{ node.addEventListener( '負荷'、context.onScriptLoad、偽)。 node.src = URL。 // IE 6-8でいくつかのキャッシュ例の場合、スクリプトが終了する前に実行されます node.addEventListener( 'エラー'、context.onScriptError、偽); } //のappendChild実行のため、匿名の定義結び付けるために 、(ノードに格納されている)モジュール名に呼び出しで保持// DOM挿入した後に、このノードへの参照に//が、明確。 currentlyAddingScript =ノード。 (baseElement){もし head.insertBefore(ノード、baseElement)。 }他{ head.appendChild(ノード)。 } currentlyAddingScript = NULL; ノードを返します。 }それ以外の場合(isWebWorker){ {しようと importScriptsを使用して、ウェブワーカーで//。これは非常にではありません importScriptsの//効率的に使用するまで、importScriptsはブロックします //そのスクリプトがダウンロードされ、評価されます。しかし、もしウェブワーカー //は、劇中のようにビルドが行われていることを期待している //唯一のスクリプトはとにかくロードする必要があります。これは、する必要があるかもしれない 他のユースケースが一般的になっている場合//再評価します。 importScripts(URL); //匿名モジュールのアカウント context.completeLoad(moduleNameの); }キャッチ(E){ context.onError(makeError( 'importscripts'、 'importScriptsが失敗しました' + 'での' moduleNameの+ + URL、 すなわち、 [moduleNameの]))。 } } }。