我很难让 JavaScript 函数执行一次且仅在 DOM 元素完全加载时执行。我尝试了无数的setInterval
s、seTimeout
s、FOR
循环、IF
语句、WHILE
循环等的组合,但一无所获。
我确实设法让它工作了一次,但它是命中注定的,因为我只能通过将功能延迟 2 秒来让它工作(这不好,因为没有确切说明加载需要多长时间) 并一遍又一遍地快速重新启动相同的功能,这也不好。
我只需要一些东西来不断地扫描页面以判断元素是否存在并具有内容(innerHTML != undefined
或其他内容),一旦加载(并且仅一次)执行一段代码,然后停止扫描页面。
有没有人找到办法做到这一点?另外,我需要 JavaScript,而不是 jQuery。
谢谢。
原始代码
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);
}
}