【发布时间】:2015-03-31 18:10:31
【问题描述】:
我尝试编写一个加载 js 脚本 (src) 并在加载脚本时执行一些回调的 JavaScript 函数。
我还会查看是否已经存在具有相同 src 的脚本。
我的问题是如果脚本已经加载,回调将不会被执行。那是挪威克朗。
如何知道脚本是否已经加载?
importScript: (function (head) {
function loadError(error) {
throw new URIError("The script " +
error.target.src + " is not accessible.");}
return function (url, callback) {
var existingScript = document.querySelectorAll("script[src='" +
url + "']");
var isNewScript = (existingScript.length == 0);
var script;
if (isNewScript) {
script = document.createElement("script")
script.type = "text/javascript";
}
else {
script = existingScript[0];
}
script.onerror = loadError;
if (script.readyState) { //IE
script.onreadystatechange = function () {
if (script.readyState == "loaded" ||
script.readyState == "complete") {
script.onreadystatechange = null;
if (callback) {
callback(); }
}
};
} else { // others than IE
script.onload = callback; }
if (isNewScript) {
script.src = url;
head.appendChild(script); }
}
})(document.head || document.getElementsByTagName("head")[0])
据我了解,script.readyState == "loaded" || script.readyState == "complete"仅适用于 IE,不适用于其他浏览器...
用法:
importScript("myScript1.js");
importScript("myScript2.js", /* onload function: */
function () { alert("The script has been OK loaded."); });
【问题讨论】:
-
if (isNewScript) {script.src = ...} else {callback(false);},并检查callback中传递的参数,检测脚本是否真的被加载了? -
这能回答你的问题吗? Verify External Script Is Loaded
标签: javascript html