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

Eri*_*ier 5 javascript scripting internet-explorer unit-testing

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

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

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

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

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

Ann*_*nie 8

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

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

接下来我想到的就是onreadystatechange事件:

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

这个事件对我来说是两次,一次是"加载",另一次是"加载",无论脚本是否有效.我发现的其他文档说,有时它会触发一个完整的事件,并且它应该在什么时候发射它并不是很清楚.所以它看起来不会起作用.

所以我认为你留下了一个hacky解决方案,检查脚本应该声明的变量是否确实存在.在HTML中:

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

然后当然在declare_foo.js中,你有

var foo = 'Script loaded successfully';
Run Code Online (Sandbox Code Playgroud)