DOM要素が完全にロードされたときにのみJavaScript関数を一度だけ実行するのに少し苦労しています。setInterval
s、seTimeout
s、FOR
ループ、IF
ステートメント、ループなどの無数の組み合わせを試しましたが、WHILE
どこにも行きませんでした。
私はそれを一度動作させることができましたが、関数を2秒遅らせることによってしか動作させることができなかったので、それはヒットアンドミスです(ロードにかかる時間を正確に知ることができないため、これは良くありません)そして同じ機能を何度も何度もすばやく再発射しますが、これも良くありません。
常にページをスキャンして、要素が存在し、コンテンツ(innerHTML != undefined
、または何か)があるかどうかを確認し、コードのブロックが読み込まれるとすぐに(1回だけ)実行してから、ページのスキャンを停止するものが必要です。
誰かがこれを行う方法を見つけましたか?また、jQueryではなくJavaScriptが必要です。
ありがとう。
元のコード
function injectLink_Bridge(){
setTimeout(function(){
injectLink();
}, 2000);
}
function injectLink(){
var headerElement = document.getElementsByClassName("flex-module-header");
if (headerElement.innerHTML == undefined) {
console.log("Element doesn't exist. Restarting function");
setTimeout(function(){
injectLink_Bridge(); //I can't remember if the bridge is necessary or not
}, 2000);
} else {
console.log("Element exists. Injecting");
setTimeout(function(){
headerElement[1].innerHTML += "code" //Inject code into the second instance of the class-array
}, 2000);
}
}
完成したコード
function injectLink(){
var headerElement = document.getElementsByClassName("flex-module-header")[1]; //Get the second instance
if(headerElement && headerElement.innerHTML != ""){
console.log("Element exists and has content. Injecting code...");
headerElement.innerHTML += "code"; //Currently revising, due to T.J. Crowder's side-note
} else {
console.log("Element doesn't exist or has no content. Refiring function...");
setTimeout(injectLink, 250);
}
}