こんにちはHabr!
誰もがスクリプト読み込みタスクの解決策を知っています。
たとえば、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 ){
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です。