Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.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 ';onload';处理程序';脚本';internet explorer中的标记_Javascript_Internet Explorer_Onload - Fatal编程技术网

Javascript ';onload';处理程序';脚本';internet explorer中的标记

Javascript ';onload';处理程序';脚本';internet explorer中的标记,javascript,internet-explorer,onload,Javascript,Internet Explorer,Onload,我一直在使用将onload处理程序附加到脚本标记,这似乎是通过internet推荐的方法。 然而,如果页面已经加载(在IE8中测试),它在InternetExplorer中不起作用。您可以看到它在普通浏览器中工作(加载脚本时发出警报) 我错过什么了吗? 谢谢你你应该打电话,这正是你想要的 编辑:以下是jQuery的相关源代码: var head = document.getElementsByTagName("head")[0] || document.documentElement; var

我一直在使用将onload处理程序附加到脚本标记,这似乎是通过internet推荐的方法。
然而,如果页面已经加载(在IE8中测试),它在InternetExplorer中不起作用。您可以看到它在普通浏览器中工作(加载脚本时发出警报)

我错过什么了吗?
谢谢你

你应该打电话,这正是你想要的

编辑:以下是jQuery的相关源代码:

var head = document.getElementsByTagName("head")[0] || document.documentElement;
var script = document.createElement("script");
if ( s.scriptCharset ) {
    script.charset = s.scriptCharset;
}
script.src = s.url;

// Handle Script loading
    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;
        jQuery.handleSuccess( s, xhr, status, data );
        jQuery.handleComplete( s, xhr, status, data );

        // Handle memory leak in IE
        script.onload = script.onreadystatechange = null;
        if ( head && script.parentNode ) {
            head.removeChild( script );
        }
    }
};

// Use insertBefore instead of appendChild  to circumvent an IE6 bug.
// This arises when a base node is used (#2709 and #4378).
head.insertBefore( script, head.firstChild );

我还遇到了script.onload=runFunction的问题;在IE8中

我尝试了jQuery.getScript,它非常适合我的需要。唯一的缺点是在添加脚本之前必须等待jQuery加载

然而,由于我的回调函数大量使用jQuery,我发现这是一个非常可以接受的、非常小的缺点,因为它创建了一个非常易于使用的跨浏览器解决方案

更新:

下面是一种不使用jQuery的方法:

(修改后的解决方案来自:)


不太可能,因为jquery最初不可用:我必须这样加载它。但我会检查源代码,看看它是否在IE+1中工作,以获得有趣的参考,谢谢!一个很好的答案,谢谢你,你不必使用jQuery来学习这种完全有效的方法,然后再写类似的东西。:)我认为“jQuery.handleSuccess(s,xhr,status,data);jQuery.handleComplete(s,xhr,status,data);”可能不是必需的,如果逐字使用会导致错误。请注意,IE9+同时支持script.onload和script.onreadystatechange(),因此这两个事件都会被触发(这是两个调用),这就是为什么“完成”的原因这是需要的。如果您需要将其包装在一个模块中以帮助多个脚本加载,请记住这一点。您可以发现相同的代码即用(没有jQuery部分)在IE8及以下版本中不支持onload。它在IE9标准模式下工作。@我不知道你的意思,window.attachEvent('onload',fn);到目前为止他一直为我工作。@NikitaRybak中也提到了它,我还试图实现一种方法,在脚本中加载jquery(如果尚未加载),然后在加载时调用函数。ie中的脚本没有
onload
。您找到了这样做的方法吗?在加载async=false的脚本时,您可能会发现这很有帮助。看起来jQuery在没有轮询的情况下成功地解决了这个问题。尝试ReadyStateChange而不是设置TimeOut ieLoadBugFix函数做得非常好。它已经测试过了。我很兴奋stackoverflow如何帮助8年前提出的解决方案。太神奇了
var url = 'http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js';
var headID = document.getElementsByTagName("head")[0];
var script = document.createElement('script');
script.type='text/javascript';
script.src=url;

//for nonIE browsers
script.onload=function(){
        addVideo();
    }

 //for IE Browsers
 ieLoadBugFix(script, function(){
     addVideo();}
 );

function ieLoadBugFix(scriptElement, callback){
        if (scriptElement.readyState=='loaded' || scriptElement.readyState=='completed') {
             callback();
         }else {
             setTimeout(function() {ieLoadBugFix(scriptElement, callback); }, 100);
         }


 }

headID.appendChild(script);