代码之家  ›  专栏  ›  技术社区  ›  Eric Bréchemier

如何在Internet Explorer中触发script.onerror?

  •  5
  • Eric Bréchemier  · 技术社区  · 15 年前

    这个 onerror page on MSDN 声明OnError处理程序可以附加到脚本元素,并且它“在对象加载过程中发生错误时激发”。

    为了进行单元测试,我试图让这个OnError处理程序启动,但找不到合适的示例。

    以下代码在Firefox中触发错误,但Internet Explorer中不显示任何警报

    <script src="http://www.google.com/NOTFOUND.js" onerror="alert('error fired')"></script>
    

    是否有人知道script.src的值会激发附加到script.onerror的处理程序?

    3 回复  |  直到 13 年前
        1
  •  8
  •   Dan F    15 年前

    我发现了这个 buried in some MSDN documentation :

    请注意,文档错误地指出这也适用于元素;错误将在3月Internet Explorer 5最终版本的研讨会文档中修复。

    接下来我想到的是OnReadyStateChange事件:

    <script src="http://www.google.com/NOTFOUND.js" onreadystatechange="alert(this.readyState)">
    

    无论脚本是否有效,此事件将为我触发两次,一次使用“加载”,另一次使用“加载”。我发现的其他文档也指出,有时候它会触发一个完整的事件,但不清楚什么时候应该触发。所以这看起来是行不通的。

    所以,我认为剩下的就是检查脚本应该声明的变量是否真的存在的黑客解决方案。在HTML中:

    <script src="http://yourdomain.com/declare_foo.js"></script>
    <script>if (typeof foo == "undefined") {alert ('error loading script');}</script>
    

    当然,在申报表中,你会

    var foo = 'Script loaded successfully';
    
        2
  •  0
  •   Community CDub    8 年前

    刚刚阅读了一些关于这个的内容,看起来OnError也可以附加到窗口对象上。见:

    http://www.javascriptkit.com/javatators/error.shtml

    根据该页面,您可以传递msg、url和linenumber参数:

    window.onerror=function(msg,url,linenumber){
    alert('错误消息:'+msg+'\nurl:'+url+'\n行号:'+linenumber)
    返回真
    }
    < /代码> 
    
    

    不确定是否支持浏览器,但感谢您引起我的注意!

    更新:在Safari 4中没有做任何事情(除了像往常一样记录Firebug中的错误),但在Firefox 3.6 Beta 5中显示警报。错误测试位于http://www.javascriptkit.com/javatators/errortest2.htm“rel=”nofollow noreferrer“>http://www.javascriptkit.com/javatators/errortest2.htm

    更新2:完成以下测试:

    index.html:。

    <html>
    &头;
    <script type=“text/javascript”>
    
    window.onerror=函数(msg,url,linenumber){
    alert('错误消息:'+msg+'\nurl:'+url+'\n行号:'+linenumber)
    返回true
    }
    & /脚本& GT;
    
    <script type=“text/javascript”src=“js.js”></script>
    和/头& GT;
    和身体;
    和/身体;
    & lt//html & gt;
    

    JS.JS:(愚蠢的名字,我知道!)

    document.write('hi there'
    

    结果是FF 3.6测试版5:

    也可以将错误附加到窗口对象。见:

    http://www.javascriptkit.com/javatutors/error.shtml

    根据该页面,您可以传入msg、url和linenumber参数:

    window.onerror=function(msg, url, linenumber){
     alert('Error message: '+msg+'\nURL: '+url+'\nLine Number: '+linenumber)
     return true
    }
    

    不确定是否支持浏览器,但感谢您引起我的注意!

    更新:在Safari4中没有做任何事情(除了像往常一样记录Firebug中的错误),但是在Firefox3.6Beta5中显示了警报。错误测试http://www.javascriptkit.com/javatutors/errortest2.htm

    更新2:用以下方法进行测试:

    索引:

    <html>
    <head>
    <script type="text/javascript">
    
    window.onerror=function(msg, url, linenumber){
     alert('Error message: '+msg+'\nURL: '+url+'\nLine Number: '+linenumber)
     return true
    }
    </script>
    
    <script type="text/javascript" src="js.js"></script>
    </head>
    <body>
    </body>
    </html>
    

    JS.JS:(愚蠢的名字,我知道!)

    document.write('hi there'
    

    结果是FF 3.6 Beta 5:

    Result

        3
  •  0
  •   Tim    13 年前

    这个怎么样?

    <script language="JavaScript" type="text/javascript">
         var DidItLoad=0;
         function funcDidItLoad()
         { 
             if(DidItLoad==1)
             {
                alert("good")
             }
             else
             {
                alert("bad")
             }
             DidItLoad=0;
             return 0;
         }
         </script>
         <script language="JavaScript" type="text/javascript" onload="DidItLoad=1;" src="javascript/myError.js"></script><!--erase me--> 
         <script language="JavaScript" type="text/javascript">
            funcDidItLoad();
         </script>