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

IT技术 javascript unit-testing internet-explorer scripting
2021-03-04 04:52:49

MSDN 上onerror 页面指出 onerror 处理程序可以附加到脚本元素,并且它“在对象加载期间发生错误时触发。”。

出于单元测试的目的,我试图让这个 onerror 处理程序触发,但找不到合适的示例。

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

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

有谁知道 script.src 的值会触发附加到 script.onerror 的处理程序吗?

3个回答

我发现这隐藏在一些 MSDN 文档中

请注意,文档错误地表示这也适用于元素;该错误将在 3 月份 Internet Explorer 5 最终版本的 Workshop 文档中修复。

我想到的下一件事是 onreadystatechange 事件:

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

这个事件对我触发了两次,一次是“加载”,一次是“加载”,无论脚本是否有效。我发现的其他文档说有时它会触发一个完整的事件,并且不清楚何时应该触发。所以看起来这行不通。

所以我认为你留下了检查脚本应该声明的变量是否真的存在的hacky解决方案。在 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';
@Tom 不,没有解决方法。有些错误无法在 JavaScript 中捕获。
2021-04-23 04:52:49
我可以解决这个问题的唯一方法(超级糟糕的解决方法)是检查是否在 15 秒内加载了!
2021-04-23 04:52:49
很不错的收获!!遗憾的是,我不能假设脚本中会出现特定变量,因为此代码将被广泛用于动态加载第三方脚本。我在 MSDN 上的 onerror 页面添加了一条评论,以指向文章和您找到的注释。谢谢安妮。
2021-05-08 04:52:49

刚刚对此进行了一些阅读,看起来 onerror 也可以附加到 window 对象。看:

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
}

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

更新:在 Safari 4 中没有做任何事情(除了照常在 firebug 中记录错误),但在 Firefox 3.6 Beta 5 中显示警报。错误测试在http://www.javascriptkit.com/javatutors/errortest2。 htm

更新 2:使用以下内容进行测试:

索引.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:

结果

谢谢亚当,但我真的想在这里触发 script.onerror,而不是 window.onerror。我想检测加载动态脚本的(不成功)结束,并将处理程序设置为 window.onerror 并没有真正的帮助。
2021-04-30 04:52:49
感谢您的评论。我应该提到我知道如何触发 window.onerror 处理程序;在这里,我对 script.onerror 处理程序特别感兴趣。
2021-05-12 04:52:49

这个怎么样?

<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>
谢谢,但我正在寻找在 JavaScript 库中使用的通用解决方案,而不是一次性解决方案。
2021-05-10 04:52:49