Tôi làm cách nào để sử dụng javascript để xác định xem HTMLScriptElement đã được tải hoàn toàn chưa?Sự kiện tải lên Javascript - làm cách nào để biết liệu tập lệnh đã được tải chưa?
Làm thế nào tôi có thể xác định xem một kịch bản tự động nạp đã tải xong mà không sử dụng onload hoặc các sự kiện thay đổi onreadystate?
Mã là như sau:
TOOL.loadScript = function (url, callback, reappend, deepSearch) {
var head, curr, child, tempScript, alreadyAppended, queue,
alreadyHandled, script, handler, loadFunc;
head = document.getElementsByTagName("head")[0];
tempScript = document.createElement("script");
tempScript.src = url;
alreadyAppended = false;
queue = [];
if (deepSearch) {
// search entire document
queue.push(document.firstElementChild);
}
else {
// just search the head element
queue.push(head);
}
while (queue.length !== 0) {
curr = queue.shift();
// add child nodes to queue
child = curr.firstElementChild;
if (child !== null && child !== undefined) {
queue.push(child);
child = child.nextElementSibling;
while (child !== null && child !== undefined) {
queue.push(child);
child = child.nextElementSibling;
}
}
if (curr.tagName !== null && curr.tagName !== undefined) {
if (curr.tagName.toLowerCase() === "script" && curr.src === tempScript.src) {
script = curr;
alreadyAppended = true;
break;
}
}
}
if (!alreadyAppended) {
script = document.createElement("script");
script.type = "text/javascript";
script.async = true;
script.src = url;
}
alreadyHandled = false;
handler = function (event) {
console.log("handling event...");
if (!alreadyHandled) {
if ((!event.readyState) || (event && (event.readyState === "loaded" || event.readyState === "complete"))) {
alreadyHandled = true;
callback.apply(script, [url]);
if (loadFunc) {
loadFunc.apply(script, arguments);
}
}
}
};
if (script.onreadystatechange === undefined) {
loadFunc = script.onload;
script.onload = handler;
}
else {
loadFunc = script.onreadystatechange;
script.onreadystatechange = handler;
}
Tôi cần giúp đỡ đây. Tôi muốn chức năng gọi lại kích hoạt ngay cả khi alreadyAppeneded === true
và cùng một tập lệnh đã được tải, nhưng chỉ khi tập lệnh đó hoàn tất tải xong.
if (!alreadyAppended || (alreadyAppended && reappend)) {
head.appendChild(script);
}
};
BOTTOM LINE: Làm thế nào để xác định xem một kịch bản đã hoàn thành tải? Vui lòng hỏi tôi nếu cần.
Cảm ơn bạn.
Lưu ý * Điều này không xác minh rằng bất kỳ thứ gì thực sự được tải, chỉ phần tử được tạo. – Stephen
Người đàn ông ... cảm ơn rất nhiều vì đã nhắc tôi về khả năng này. Tôi đã cố gắng để giải quyết một vấn đề của kịch bản trùng lặp được chèn vào cùng một trang và bây giờ nó cố định. Nếu chỉ có tôi đã thấy điều này 6 giờ trước. : D –