Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript在Internet Explorer中执行两次_Javascript_Jquery_Internet Explorer_Jquery Deferred - Fatal编程技术网

Javascript在Internet Explorer中执行两次

Javascript在Internet Explorer中执行两次,javascript,jquery,internet-explorer,jquery-deferred,Javascript,Jquery,Internet Explorer,Jquery Deferred,我目前遇到了一个问题,一个延迟加载的javascript将使用internet explorer执行两次,并且只使用internet explorer(当前版本9)。Firefox和chrome都可以使用。这是我的密码: injectExternalJavaScript: function(fileUrl) { return jQuery.Deferred(function(deferred) { var script = document.createElement('

我目前遇到了一个问题,一个延迟加载的javascript将使用internet explorer执行两次,并且只使用internet explorer(当前版本9)。Firefox和chrome都可以使用。这是我的密码:

injectExternalJavaScript: function(fileUrl) {
    return jQuery.Deferred(function(deferred) {
        var script = document.createElement('script');
        script['src'] = fileUrl;
        script['type'] = 'text/javascript';
        var head = document.getElementsByTagName("head")[0];
        var done = false;
        // Attach handlers for all browsers
        script['onload'] = script['onreadystatechange'] = function() {
            if (!done && (!this.readyState || this.readyState === "loaded" || this.readyState === 'complete')) {
                done = true;
                script['onload'] = script['onreadystatechange'] = null;
                head.removeChild(script);
                deferred.resolve();
            }
        };
        head.appendChild(script);
    }).promise();
}
我已经找到并根据它修改了我的代码,但ie仍然在执行我的脚本两次。你们有什么想法吗

编辑:这是我的解决方案

injectExternalJavaScript: function(fileUrl) {
    return jQuery.Deferred(function(deferred) {
        var script = document.createElement('script');
        script['src'] = fileUrl;
        script['type'] = 'text/javascript';
        var head = document.getElementsByTagName("head")[0];
        var done = false;
        // Attach handlers for all browsers
        var cb = function() {
            if (!done && (!this.readyState || this.readyState === "loaded" || this.readyState === 'complete')) {
                done = true;
                script['onload'] = script['onreadystatechange'] = null;
                head.removeChild(script);
                deferred.resolve();
            }
        }
        if (script.addEventListener) {
            script.addEventListener('load', cb, false);
        } else {
            script['onreadystatechange'] = cb;
        }
        head.appendChild(script);
    }).promise();
}
试试这个

s = document.createElement("script");
s.src="myscript.js";
if(s.addEventListener) {
    s.addEventListener("load",callback,false);
}else if(s.readyState) {
    s.onreadystatechange = callback;
}
document.body.appendChild(s);
function callback() { console.log("loaded"); }
取自

对你来说是

injectExternalJavaScript: function(fileUrl) {
    return jQuery.Deferred(function(deferred) {
        var script = document.createElement('script');
        script['src'] = fileUrl;
        script['type'] = 'text/javascript';
        var head = document.getElementsByTagName("head")[0];
        var done = false;
        // Attach handlers for all browsers
        var cb = function() {
            if (!done && (!this.readyState || this.readyState === "loaded" || this.readyState === 'complete')) {
                done = true;
                script['onload'] = script['onreadystatechange'] = null;
                head.removeChild(script);
                deferred.resolve();
            }
        };
        if ( script.addEventListener ) {
            script.addEventListener('load',cb, false);
        } else {
            script.onreadystatechange = cb;
        }
        head.appendChild(script);
    }).promise();
}

作为替代方案,您可能会喜欢JS加载器。这不是解决方案,因为我不想加载任何超出需要的脚本。不起作用,在使用您的解决方案时仍执行两次。您能用正在执行的脚本更新您的问题吗?我无法复制(在ie8中,当前在我的vm上安装ie9)这两组代码的问题。好吧,在我改变了代码中的一些延迟后,它实际上起作用了!我认为延迟函数本身存在缺陷,而不是注入函数。我接受了你的回答。谢谢你的帮助@junior为了使代码正常工作,做了哪些更改?@mearde请看一下我最初的问题,我在帖子底部添加了正常工作的代码。