誰もがスクリプト読み込みタスクの解決策を知っています。
たとえば、Curl.JS、Require.JS、および人気のあるフレームワークもこれを実行できます。
主な更新:すべてコメントで議論されました。 アズプロダクションと概念的なコメントを寄せてくれたnuit 、そしてアイヌが精神的なサポートをくれてありがとう。
コメントから、 LMDを使用する方が100%優れていることが明らかです。 ここで説明されているものとすべてが同じであり、依存関係、キャッシュなどのアカウントのみがあります。 そして、はい、それはずっと以前に発明されました、すなわち 初めてでした!
LMDとは:尊敬されるazproductionを読んでください 。
MAIN UPDATEが作成された理由、つまりcatの下ではなくLMDを使用する理由についての質問に答えるために、情報提供の目的で使用できるコードがありました。
また、「with」ステートメントが現在Deprecatedであることも重要です。
これはすべて参考文献として書かれています 。
ブートローダーコードは排他的に提供され、LMDで考慮される追加の側面はありません。
UPD: mozIJSSubScriptLoaderやComponents.utils.importがFirefox拡張機能に対してどのように機能するかをブラウザーに実装する試みで作成されました。
つまり、スコープを再定義しながらスクリプトをロードします。
例 。
最初のソースへのリンク: 2つ
jQueryのメソッドとしてのスクリプトローダーの最終コード:
(function( jQuery, undefined ){ jQuery.loadSubScript = function( url, scope, thisName, returnCallback ){ // scope var scope = scope || window; // var thisName = thisName || window; $.ajax( { url: url , type: 'GET' , dataType: 'text' , success: function( data ){ try{ // , with var fns = new Function( 'with( this ){ return ' + Function.apply( null, [ data ] ) + '; }' ); // with fns = fns.call( scope ); // this var turn = fns.call( thisName ); // callback, returnCallback && returnCallback( turn ); }catch(e){ alert(e); } } , error: function( jqXHR, textStatus, errorThrown ){ alert('Loader Error:\n' + errorThrown ); } } ); }; })( jQuery );
noConflictメソッドを実装するプラグインもありません 。これにより、ウィンドウからブートローダーコードを削除できます($ .ajaxにはjQueryが引き続き使用されます)。
このコードを使用して取得できるもの:
- スクリプトをグローバルオブジェクト:windowにロードするだけです。
- 「substitution」スコープでスクリプトをダウンロードします:window + YourOwnScopObject。
- これを置き換えてスクリプトをダウンロードします。
- たとえば、ダウンロードスクリプトにreturnを記述するだけで、コールバックに何かを返します。
- define()を取り除きます。
もちろん、何かがvarを保持している場合、作成されたクロージャー内にあります。 varがなければ、当然のことながら、ウィンドウに到達します。 スコープに渡されるオブジェクトのメソッドには、ドットなしでアクセスできます。 これにより-交換の場合、すべてが通常通りです。
制限:Google ChromeおよびOperaのローカルファイル。
Chromeの場合、キー--allow-file-access-from-filesで実行することで修復されます。
ただし、LMDを使用することをお勧めします。
健康のために使用してください!
GITリンク
よろしく!
PS:どのライセンスを選択すればよいかわかりません。おそらくMIT + GPLv3です。