作者:落单鸟人 | 2023-08-30 18:13
我正在动态地向
页面添加标签
,我希望能够以某种方式判断加载是否失败 - 404,加载脚本中的脚本错误等等.
在Firefox中,这有效:
var script_tag = document.createElement('script');
script_tag.setAttribute('type', 'text/javascript');
script_tag.setAttribute('src', 'http://fail.org/nonexistant.js');
script_tag.onerror = function() { alert("Loading failed!"); }
document.getElementsByTagName('head')[0].appendChild(script_tag);
但是,这在IE或Safari中不起作用.
有没有人知道如何在Firefox以外的浏览器中使用它?
(我不认为需要在.js文件中放置特殊代码的解决方案是一个很好的解决方案.它不够优雅且不灵活.)
1> Diodeus - Ja..:
脚本标记没有错误事件.您可以判断它何时成功,并假设它在超时后未加载:
好吧,是的,如果文件LOADS并且文件本身有错误,但如果文件没有提供,则onload将永远不会触发.
即使出现javascript错误,也会触发"onload"侦听器.
脚本标记有错误.未找到资源时将触发.
2> andrerom..:
如果您只关心html5浏览器,则可以使用错误事件(因为这仅用于错误处理,因此只能在KISS IMHO的下一代浏览器上支持此功能).
从规格:
如果src属性的值为空字符串或者无法解析,则用户代理必须将任务排队以在元素上触发名为error的简单事件,并中止这些步骤.
〜
如果加载导致错误(例如DNS错误或HTTP 404错误)执行脚本块必须只包括在元素处触发名为error的简单事件.
这意味着您不必进行任何容易出错的轮询,并且可以将其与async和defer属性结合使用,以确保脚本不会阻止页面呈现:
即使指定了async属性,也可以指定defer属性,以使仅支持延迟(而非异步)的旧Web浏览器回退到延迟行为而不是默认的同步阻塞行为.
有关http://www.w3.org/TR/html5/scripting-1.html#script的更多信息
`
My Test Page!