定義なしのJavaScriptローダー

こんにちはHabr!



誰もがスクリプト読み込みタスクの解決策を知っています。

たとえば、Curl.JS、Require.JS、および人気のあるフレームワークもこれを実行できます。



主な更新:すべてコメントで議論されました。 アズプロダクション概念的なコメントを寄せてくれたnuit 、そしてアイヌ精神的なサポートをくれてありがとう。



コメントから、 LMDを使用する方が100%優れていることが明らかです。 ここで説明されているものとすべてが同じであり、依存関係、キャッシュなどのアカウントのみがあります。 そして、はい、それはずっと以前に発明されました、すなわち 初めてでした!



LMDとは:尊敬されるazproductionを読んでください



MAIN UPDATEが作成された理由、つまりcatの下ではなくLMDを使用する理由についての質問に答えるために、情報提供の目的で使用できるコードがありました。

また、「with」ステートメントが現在Deprecatedであることも重要です。







これはすべて参考文献として書かれています



ブートローダーコードは排他的に提供され、LMDで考慮される追加の側面はありません。



UPD: mozIJSSubScriptLoaderComponents.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が引き続き使用されます)。



このコードを使用して取得できるもの:







もちろん、何かがvarを保持している場合、作成されたクロージャー内にあります。 varがなければ、当然のことながら、ウィンドウに到達します。 スコープに渡されるオブジェクトのメソッドには、ドットなしでアクセスできます。 これにより-交換の場合、すべてが通常通りです。



制限:Google ChromeおよびOperaのローカルファイル。

Chromeの場合、キー--allow-file-access-from-filesで実行することで修復されます。



ただし、LMDを使用することをお勧めします。



健康のために使用してください!



GITリンク



よろしく!



PS:どのライセンスを選択すればよいかわかりません。おそらくMIT + GPLv3です。



All Articles