Vanilla Javascript仅限IE浏览器

时间:2014-08-20 11:13:29

标签: javascript internet-explorer onload deferred

我不会用太多的“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(你现在可以称我为傻瓜)表现......至少一次。

1 个答案:

答案 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;。