真っ先に:このプロジェクトはJQueryを使用していません。
サードパーティのJavaScriptがいくつかあります。大きくて毛深いので、頻繁に使用する必要がないため、次の必要な場合にのみ動的にロードします。
function loadBigHairyCode()
{
var file = document.createElement('script')
file.setAttribute("type","text/javascript")
file.setAttribute("src","path/to/big/ugly/script/file.js")
document.getElementsByTagName("head")[0].appendChild(file)
magic_needs_to_happen_here
}
ここに示されていない対応するCSSを含め、スクリプトの読み込みは正常に機能します。
UglyGlobalFunc
ロードされたファイルは、通常の方法で他の場所で使用するコンストラクター関数(と呼びます)を定義します( var foo = new UglyGlobalFunc(....)
)。問題は、そのファイルの残りの部分がちょっと醜いので、それを少し修正して、それがより少なくなるようにする必要があるということです。具体的には、上記の「魔法はここで起こる必要がある」を示した時点で、次のように書きたいと思います。
UglyGlobalFunc.prototype.BodgeBodgeBodge = function() {....}
基になるファイルを編集しているかのように。
しかし、それは失敗します。コードのその時点では、UglyGlobalFuncが未定義であり、これは理にかなっています。のような単純なレベルの間接参照についても同じwindow.UglyGlobalFunc.proto...
です。だから私の質問は:
動的にロードされたコンテンツは、実行のその時点(魔法が発生する必要がある場所)でもアクセスできますか?または、loadBigHairyCode()が返され、ブラウザーが何らかの更新サイクルを実行するまで、それらは「実際」になりませんか?
はいの場合、どうすればそれらにアクセスできますか?ある種のgetGlobalVariableByName( "string")関数?
そうでない場合は、...aieee。普通の正気の人はどうやってそのようなことをするのですか?