定義なしの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です。

Source: https://habr.com/ru/post/J145618/


All Articles