<img style="" src="" onerror='this.style.visibility = "hidden"' />
如果无法找到图像,这个非常简单的onerror事件处理程序会隐藏图像。
它可以在Chrome中使用,但在Firefox中,它什么都不做。
这是一个jsFiddle,您可以尝试在Chrome和Firefox中运行以查看它的实际效果。
为什么firefox不起作用?
任何帮助将不胜感激
答案 0 :(得分:8)
我不确定浏览器之间的内部推理,但是当提供无效的非空属性时,Firefox会很乐意触发onerror
回调。例如:
<img style="" src="asdf.jpg" onerror='this.style.visibility = "hidden"' />
DEMO: http://jsfiddle.net/18ga9hh8/
在这两种浏览器中,当存在空src
属性时,不会向服务器发出请求(使用开发人员工具的网络选项卡进行观察)。
当提供无效的非空src
时,会发出请求,并且都会收到404响应,从而触发onerror
回调(预期)。
正如您所指出的那样,使用值"?"
会强制您在两个浏览器上的所需行为。它做的是做一个请求(可以是当前页面的URL,或当前页面的目录,因为它被认为是一个相对路径 - 取决于浏览器的设计目的),但无法将其应用为图像(它是一个HTML响应),导致错误。
如果您想知道或关心,HTML5 spec会对src
属性说明这一点:
src属性必须存在,并且必须包含一个有效的非空URL,该URL可能由引用非交互式(可选动画)图像资源的空格包围,该图像资源既不是分页也不是脚本。
如果你在页面上稍微向下看一下当用户代理要更新img元素的图像数据时,它必须运行以下步骤,#10表示以下内容:
如果选择的源为null,则将元素设置为中断状态,将任务排队以在img元素上触发名为error的简单事件,并中止这些步骤。
所以看起来Firefox并没有遵守规范,但也许我解释错了?
使用W3C验证器,空src
属性会导致验证错误,而使用"?"
值是有效的(请记住整个相对路径的事情?)。请注意,添加查询字符串(?
应该做什么)应该导致浏览器永远不会缓存图像,因此我不认为如果需要,可以使用此方法实现实际图像的缓存。 / p>