javascript - Vanilla Javascript 错误 仅限 IE

标签 javascript internet-explorer onload deferred

我不会用太多的“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/

相关文章:

javascript - 在初始页面加载时加载目标 ajax php 文件

javascript - 本地存储错误

javascript - Internet Explorer 中 'script' 标记的“onload”处理程序

javascript - 带有 LevelDB 适配器的 PouchDB 是否应该创建本地文件?

css - IE 修改 DIV 边框粗细的问题

css - 在水平选项卡中与徽章右拉斗争(仅限 IE9)

javascript - ie 9 跨域 window.open postMessage 不支持此类接口(interface)

javascript - 如何知道是否已使用 javascript 加载图像

javascript - 使用显示模板显示随机图像

javascript - 如何使用 jquery 在运行时创建 json 对象数组?