2010-01-08 66 views
5

onerror page on MSDN指出“当对象装载过程中发生错误触发。”使用onerror处理程序可以连接到一个脚本元素和它。如何触发script.onerror在Internet Explorer?

为单元测试的目的,我试图让这个的onerror处理火灾,也没有找到合适的例子。

下面的代码触发Firefox中的错误,而是显示在Internet Explorer毫无戒备

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

有谁知道script.src将火附着script.onerror处理程序的值?

+0

IIRC,类似'src =“1”'应该会触发错误。 – kangax 2010-01-09 03:16:14

+0

@kangax:不错的尝试,但没有,SRC =“1”只有触发window.onerror,不script.onerror – 2010-01-09 13:47:29

+0

没有真正涉及到这个问题,但我注意到你致力于代码审查的建议。由于某种原因,您的代表得分不正确。您可能需要关联您的帐户或确认一些电子邮件才能解决问题。较低的代表不幸地对提案承诺影响较小。 – greatwolf 2011-01-13 13:49:29

回答

8

我发现这个buried in some MSDN documentation

注意的是,文件误认为这个工程太元素;该错误将在3月份最终版Internet Explorer 5的Workshop文档中得到解决。

我想到的是,接下来的事情可以帮助是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> 

然后在declare_foo.js当然,你必须

var foo = 'Script loaded successfully'; 
+1

非常好的赶上!令人遗憾的是,我不能认为脚本中会存在一个特定的变量,因为这个代码将被用于动态加载第三方脚本。 我加入到MSDN上的onerror页面评论指向回文章,你发现的说明。谢谢安妮。 – 2010-01-09 14:16:25

+0

@Eric你有没有找到解决这个问题的解决方法? – Tom 2010-11-14 14:36:14

+0

@Tom nope,没有解决方法。有些错误无法在JavaScript中捕获。 – 2010-11-16 13:08:50

0

已经刚刚做了一点阅读此,它看起来像的onerror也可以附加到window对象。请参阅:

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

根据该页面中,您可以在味精,URL和行号参数传递:

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

不知道在这个浏览器的支持,但感谢它带给我的注意!

更新:没有在Safari 4做任何事情(除了登录萤火一个错误往常一样),但显示在http://www.javascriptkit.com/javatutors/errortest2.htm

更新2在Firefox 3.6测试版5.错误测试警报:做了测试有以下:

的index.html:

<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

+1

感谢您的评论。我应该提到我知道如何触发window.onerror处理程序;在这里我特别感兴趣的是script.onerror处理程序。 – 2010-01-08 13:44:07

+2

感谢亚当,但我真的试图在这里触发script.onerror,而不是window.onerror。我想检测加载动态脚本的(不成功)结束,并将处理程序设置为window.onerror并不会真的有帮助。 – 2010-01-08 14:00:14

0

这个怎么样?

<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> 
+1

谢谢,但我一直在寻找一个在JavaScript库中使用的通用解决方案,而不是一次性的解决方案。 – 2011-12-09 10:42:00