यह निर्धारित करने के लिए जावास्क्रिप्ट का उपयोग कैसे कर सकता हूं कि HTMLScriptElement पहले से ही पूरी तरह से लोड हो चुका है या नहीं?जावास्क्रिप्ट ऑनलोड ईवेंट - यह कैसे बताना है कि स्क्रिप्ट पहले से लोड हो चुकी है या नहीं?
मैं कैसे तय कर सकते हैं अगर एक गतिशील लोड स्क्रिप्ट ऑनलोड या onreadystate परिवर्तन की घटनाओं का उपयोग किए बिना लोड हो रहा है समाप्त हो गया है?
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;
}
मैं यहाँ मदद की जरूरत है:
कोड इस प्रकार है। मैं कॉलबैक फ़ंक्शन को आग लगाना चाहता हूं भले ही alreadyAppeneded === true
और उसी स्क्रिप्ट को पहले ही लोड किया गया हो, लेकिन केवल तभी वह स्क्रिप्ट पूरी तरह से लोड हो गई हो।
if (!alreadyAppended || (alreadyAppended && reappend)) {
head.appendChild(script);
}
};
नीचे पंक्ति: किस तरह तय करते मैं एक स्क्रिप्ट लोड हो रहा है पूरा कर लिया है तो क्या होगा? यदि आवश्यक हो तो कृपया मुझसे प्रश्न पूछें।
धन्यवाद।
नोट * यह है कि कुछ भी वास्तव में भरी हुई है, बस उस तत्व बनाया गया था सत्यापन नहीं करता। – Stephen
मैन ... इस संभावना के बारे में मुझे याद दिलाने के लिए बहुत बहुत धन्यवाद। मैं एक ही पृष्ठ पर डुप्लिकेट स्क्रिप्ट डालने की समस्या को हल करने की कोशिश कर रहा था और अब यह तय हो गया है। अगर मैंने केवल 6 घंटे पहले देखा था। : डी –