我不会用太多的“blahblahblah”来打扰你,因为大多数人都会非常清楚以下剧本。谷歌让这只野兽出局后,围绕这个话题出现了很多问题。
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(你现在可以称我为傻瓜)表现......至少一次。
答案 0 :(得分:4)
似乎错误在"[object Array]"!==toString.call(n)
上。
使用toString()
时,IE无法直接引用函数.call( something )
。您可以使用以下代码来修复您的问题:
没有迷你
if( Object.prototype.toString.call(elements) !== "[object Array]") {
return false;
}
缩小的
if("[object Array]"!==Object.prototype.toString.call(n)) return !1;
查看更多关于toString()的信息 - 这里的函数:&{34}下的https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString;使用toString()来检测对象类&#34;。