我不会用太多的“blahblahblah”来打扰你们,因为你们中的大多数人都会非常了解以下脚本。在 Google 让这只野兽在野外玩耍后,围绕这个话题出现了很多问题。
var elements = [
"script1.js",
"script2.js"
];
var downloadJSAtOnload = function(elements) {
if (toString.call(elements) !== "[object Array]") {
return false
}
var i, element;
for (i = 0; i < elements.length; i++) {
element = document.createElement("script");
element.src = elements[i];
document.body.appendChild(element)
}
return true
};
if (window.addEventListener) {
window.addEventListener("load", function() {
downloadJSAtOnload(elements)
}
, false)
} else {
if (window.attachEvent) {
window.attachEvent("onload", function() {
downloadJSAtOnload(elements)
})
} else {
window.onload = function() {
downloadJSAtOnload(elements)
}
}
};
据我所知,该脚本正在执行除 IE10 和 11 之外的所有浏览器中必须执行的操作。我用 browserstack 和真机进行了测试,结果相同。
可能是由于脚本的缩小,所以我还会为您提供上述脚本的缩小版本,因为我们在实际环境中使用它:
var elements=["script1.js","script2.js"],downloadJSAtOnload=function(n){if("[object Array]"!==toString.call(n))return!1;var t,e;for(t=0;t<n.length;t++)e=document.createElement("script"),e.src=n[t],document.body.appendChild(e);return!0};window.addEventListener?window.addEventListener("load",function(){downloadJSAtOnload(elements)},!1):window.attachEvent?window.attachEvent("onload",function(){downloadJSAtOnload(elements)}):window.onload=function(){downloadJSAtOnload(elements)};
我在这里做错了什么吗?因为它确实在 FF、Chrome、Safari 和 Opera 中发挥作用,所以我期待 IE(现在你可以称我为傻瓜)能够表现出来……至少一次。
最佳答案
似乎错误出现在“[object Array]”!==toString.call(n)
上。
使用.call(something)
时,IE无法直接引用函数toString()
。您可以使用以下代码来解决您的问题:
未缩小
if( Object.prototype.toString.call(elements) !== "[object Array]") {
return false;
}
缩小
if("[object Array]"!==Object.prototype.toString.call(n)) return !1;
在此处查看有关 toString() 函数的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString在“使用 toString() 检测对象类”下。
关于javascript - Vanilla Javascript 错误 仅限 IE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25403268/