如何判断<脚本>标签是否加载失败

2022-08-30 04:22:13

我正在动态地向页面添加标签,我希望能够判断加载是否以某种方式失败 - 404,加载脚本中的脚本错误,等等。<script><head>

在 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

2021年更新:目前所有浏览器都支持脚本标签,例如:onerror=""

2010年的原始评论:

如果你只关心html5浏览器,你可以使用错误事件。

从规格:

如果 src 属性的值是空字符串或无法解析,则用户代理必须将任务排队,以便在元素处触发名为 error 的简单事件,并中止这些步骤。

(...)

如果加载导致错误(例如 DNS 错误或 HTTP 404 错误),则执行脚本块必须只包含对元素触发名为 error 的简单事件。

这意味着您不必执行任何容易出错的轮询,并且可以将其与异步和延迟属性结合使用,以确保脚本不会阻止页面呈现:

即使指定了异步属性,也可以指定延迟属性,以使仅支持延迟(而不是异步)的旧版 Web 浏览器回退到延迟行为,而不是默认的同步阻塞行为。

有关 http://www.w3.org/TR/html5/scripting-1.html#script 的更多信息


答案 2

脚本标记没有错误事件。您可以判断它何时成功,并假设它在超时后尚未加载:

<script type="text/javascript" onload="loaded=1" src="....js"></script>