JavaScriptファイルを動的にロードしようとしていますが、ロードされたらファイル内の関数を実行します。私のメインのHTMLでは、私は基本的に持っている:私は、インターネット上で見つけることができるものから、動的に追加されたスクリプトが解析/ロード/実行されたことを知る方法?
function load_javascript(js_file)
{
function load_js_callback(example)
{
console.log("function " + function_in_js_file + " is " + typeof(function_name));
if (typeof(function_in_js_file) == "undefined")
{
window.setTimeout(load_js_callback(example), 500);
return false;
}
function_in_js_file(example);
}
var jstag = document.createElement("script");
document.head.appendChild(jstag);
// Browsers:
jstag.onload=load_js_callback("example");
// Internet Explorer:
jstag.onreadystatechange = function() {
if (this.readyState == 'complete') {
load_js_callback("example");
}
}
jstag.setAttribute('src',js_file);
}
load_javascript("/js/example.js");
(https://stackoverflow.com/a/3248500とhttps://stackoverflow.com/a/16231055)これは動作するはずですが、jstag.onload
実行function_in_js_file
が定義されているので、私がチェックするwindow.setTimeout
を必要とされる前に、関数が定義されるまで再度呼び出します。
理想的には、私はそのタイムアウトを取り除きたいと思います。ファイルのロード/解析/実行が完了したことを知る方法はありますか(私には正しい用語がわからない)、関数が動的ファイルを変更することなく理想的に定義されていますか?私はまたdocument.head.appendChild(jstag);
をjstag.setAttribute
の後に入れてみましたが、同じ結果が出ました。
あなたのためのスクリプトが必要なフレームワークを使用していない場合は、コードが実行されたことを確認するjsメソッドがありません。ちょっとしたカスタムソリューションをしようとすると、ファイルの末尾にvarが付いてしまいました(たとえば、ファイルと同じ名前、または接頭辞/接尾辞が付いています)。私は次に、すべてが実行されていることを保証するために、このvarの存在をテストします – Kaddath
varが存在しない場合、基本的にタイムアウトが必要ですか? – Jonathan
はい、またはsetIntervalではなく私はbrowserifyがどのようにインポートを処理するのかを見なければならないし、もしこのようなチェックがあるなら、私は問題に興味がある、私は何かを見つけたら更新するだろう – Kaddath