哪些HTML元素支持onerror属性?

6
我有一个网站,从Google Web Fonts加载CSS和字体。然而,该网站将在无互联网访问权限的本地Intranet上使用。
我仍然希望在可能的情况下使用来自Google的字体,以享受Google提供的好处,例如从CDN下载字体并且可能已经从访问使用它们的其他网站中缓存到用户计算机上。
我还使用Google-hosted jQuery,并使用以下代码(从HTML5 Boilerplate)从我的服务器加载jQuery,如果无法访问Google:
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="js/vendor/jquery-1.9.0.min.js"><\/script>')</script>

我正在寻找一种处理CSS文件的方法。
过去,我使用<img src="..." onerror="..." />来处理无法加载的图像,所以我想知道是否可以将其用于无法加载的样式表。我在几个浏览器中进行了快速测试,使用<link href="..." onerror="..." rel="stylesheet" type="text/css" />,并且在所有浏览器中都执行了onerror,但我想知道是否可以指望它在所有浏览器中都能一致工作。或者有更好的方法吗?
我在这里看到了其他几个答案,讨论了观察document.styleSheets集合,但这听起来比这更像一个hack。
注意:这更多是一个“这是否实用并且人们使用它”的问题,而不是一个“规范对此有什么说法”的问题。

我从未使用过它,但是再想想,我也不知道它的存在,所以... - PitaJ
Quirksmode页面(http://www.quirksmode.org/dom/events/error.html)表示不支持该功能,但这些大多是旧版本,因此似乎已经有所改变。您可以在其测试页面上尝试浏览器:http://www.quirksmode.org/dom/events/tests/error.html - yakatz
1
@PitaJ 我是在一个班级使用的论坛上,有人利用它进行了跨站脚本攻击时才发现这个问题。论坛软件过滤了<script>标签和onclick属性中的javascript等内容,但没有过滤掉onerror属性。一名学生利用这个漏洞获取了所有会话cookie,并冒充教师一段时间,直到有人发现为止。 - yakatz
@yakatz,你可以为每个白名单元素列出一个白名单属性列表(最好确保有效的x/HTML/5所需的属性可用),或者至少过滤掉每个_on*属性。 - Paul S.
@PaulS。我知道,但是论坛软件的开发人员不知道。我几乎总是使用白名单。这主要保护您免受新标准(如HTML5)的影响。 - yakatz
2个回答

6
我相信你所寻找的是Pieisgood上支持<script><link>的事件列表
如你所见,<link>最广泛支持onload,但其工作事件非常缺乏。但你可以尝试通过使onload clearTimeout来实现错误事件,以便某些函数会认为发生了错误。

看起来那个列表并不完全准确(例如,在IE10中,link onerror只能部分工作),但这是我能找到的最好的。 - Moshe Katz

0

<link><style><script> 都支持 onerror 属性,并且在大多数现代/流行的浏览器中都能正常工作。

需要注意的是,<link> 的一个小问题是,当 href URI 被破坏或链接样式表中的任何 @import URI 被破坏时,它将触发 onerror 事件。

我发现唯一触发 <style>onerror 事件的方法是使用 @import

无论是哪个标签,破损的 @font-face 似乎都不会触发该事件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接