包含没有src的图像的有效方法是什么?

jhc*_*hen 214 html validation

我有一个图像,我稍后将使用javascript动态填充src,但为了方便起见,我希望图像标记存在于pageload但不显示任何内容.我知道<img src='' />是无效的,那么最好的方法是什么?

Ben*_*ank 233

虽然没有有效的方法来省略图像的来源,但有些来源不会导致服务器命中.我最近有一个与iframes 类似的问题,并决心//:0成为最佳选择.不完全是!

//(省略协议)开始会导致使用当前页面的协议,从而防止HTTPS页面中出现"不安全内容"警告.跳过主机名不是必需的,但会缩短它.最后,一个端口:0确保无法进行服务器请求(根据规范,它不是有效的端口).

这是我发现的唯一一个在任何浏览器中都没有导致服务器命中或错误消息的URL.通常的选择 - javascript:void(0)如果在通过HTTPS提供的页面上使用,将在IE7中引起"不安全的内容"警告.任何其他端口都会导致尝试连接服务器,即使对于无效的地址 (有些浏览器只会发出无效请求并等待它们超时.)

这在Chrome,Safari 5,FF 3.6和IE 6/7/8中进行了测试,但我希望它可以在任何浏览器中运行,因为它应该是杀死任何尝试请求的网络层.

  • 这个答案可能会导致您的防火墙警告您访问端口0,例如.或者它可能导致服务器安全日志.建议"关于:空白"的答案可能是一个更好的解决方案. (16认同)
  • 这也失败了w3c验证器:元素img上属性src的值为//:0:无效主机:空主机. (10认同)
  • 这导致我显示损坏的图像图标.其他人看到这个?我正在使用最新的Firefox(27). (7认同)
  • 在Firefox 38中,此方法触发图像的“ onerror”处理程序。 (2认同)

Isi*_*ius 205

另一种选择是嵌入空白图像.任何适合您目的的图像都可以,但以下示例编码的GIF只有26个字节 - 来自http://probablyprogramming.com/2009/03/15/the-tiniest-gif-ever

<img src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=" width="0" height="0" alt="" />
Run Code Online (Sandbox Code Playgroud)

根据以下评论进行编辑:

当然,您必须考虑浏览器支持要求.不支持IE7或更低版​​本是值得注意的.http://caniuse.com/datauri

  • 很好的主意!然而,对我来说,这会杀死图像元素 - 如果有人需要`img`元素的其他方面来显示例如背景和边框,请尝试`src ="data:image/gif; base64,R0lGODlhAQABAIAAAP /// wAAACH5BAEAAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAA =这取自1px x 1px透明gif我制作我通过http://www.base64-image.de/推动Photoshop (10认同)
  • 您可能需要考虑使用数据URI来内联资源:http://www.mobify.com/blog/data-uris-are-slow-on-mobile/ (4认同)
  • 这是一个透明的1像素PNG:`data:image/png; base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNgYAAAAAMAASsJTYQAAAAASUVORK5CYII =` (4认同)
  • 适用于我的透明图片网址-`data:image / gif; base64,R0lGODlhAQABAIAAAAAAAP //// yH5BAEAAAAALAAAAAABAAEAAAIBRAA7` (2认同)

nop*_*ole 17

我建议动态添加元素,如果使用jQuery或其他JavaScript库,则非常简单:

也看看prependappend.否则,如果你有这样的图像标签,并且你想让它验证,那么你可以考虑使用虚拟图像,例如1px透明gif或png.

  • +1这是最好的答案.如果动态设置图像源,则应动态添加整个元素.如果在设置src之前你不希望它可见,我想不出有什么理由说明为什么元素应该存在之前. (7认同)

Ube*_*ady 15

我有一段时间没有这样做,但我必须经历过同样的事情.

<img src="about:blank" alt="" />
Run Code Online (Sandbox Code Playgroud)

是我最喜欢的 - 这//:0意味着你会尝试在端口0(tcpmux端口?)上建立到源服务器的HTTP/HTTPS连接 - 这可能是无害的,但我宁愿不做.哎呀,浏览器可能会看到端口为零,甚至没有发送请求.但我仍然宁愿不这样说,那可能不是你的意思.

无论如何,在about:blank我测试的所有浏览器中渲染实际上非常快.我把它扔进了W3C验证器,并没有抱怨,所以它甚至可能是有效的.

编辑:不要那样做; 它不适用于所有浏览器(它会显示一个'破碎的图像'图标,如此答案的评论中所指出的).使用<img src='data:...下面的解决方案.或者,如果您不关心有效性,但仍希望避免对服务器的多余请求,则可以不<img alt="" />使用src属性.但那是无效的 HTML所以请仔细挑选.

测试页面显示了一大堆不同的方法:http://desk.nu/blank_image.php - 提供各种不同的文档类型和内容类型.- 如下面的评论中所述,使用Mark Ormston的新测试页面:http://memso.com/Test/BlankImage.html

  • 我拿了你的测试页并更新了它,所以当图像不能正常工作时更加明显.旧的空白图像包含在"Always Works"示例中,以及您所看到的内容的简要说明:http://memso.com/Test/BlankImage.html这让我意识到有效的空白数据gif是现有浏览器唯一可重复使用的选项,除了旧的空白gif图像(旧的IE7及以下版本仍然需要) (2认同)

j.j*_*.j. 14

如今,恕我直言,对于空img src来说,最好的简短,理智和有效的方法是这样的:

<img src="data:," alt>
or
<img src="data:," alt="Alternative Text">
Run Code Online (Sandbox Code Playgroud)

第二个示例显示“替代文本”(在Chrome和IE中加上破损的图像图标)。

URI "data:,"有效。空的媒体类型默认为text/plain。因此它代表一个空的文本文件,等效于"data:text/plain,"


OT:所有浏览器都能理解alt。您可以忽略="",每个HTML规范都隐含了它。

  • W3C 验证器检查没有 HTML 错误。没有不必要的要求。似乎是如何做到这一点的有效方法。 (4认同)
  • 最好的!另一件事,如果你希望它在 srcset 中验证,请使用 `srcset="data:,x"` (2认同)
  • 是的,答案是这样的:“第二个示例显示‘替代文本’(加上 Chrome 和 IE 中的损坏图像图标)。” (2认同)

iGi*_*das 12

正如评论中所写,这种方法是错误的.

之前我没有找到这个答案,但根据W3 Specs有效的空src标签将是一个锚链接#.

示例:src="#",src="#empty"

页面验证成功,没有额外的请求.

  • 我已经看到Firefox和Chrome在使用这种方法时都会发出第二个请求,所以我不推荐它. (18认同)
  • Firefox,Chrome发出第二个请求,甚至JMeter解析img src,导致递归页面加载(直到达到最大深度) (5认同)
  • 这是完全错误的.任何碰巧阅读评论的人 - 不要使用这个 (3认同)

小智 9

如果你保持src属性为空,浏览器会向当前页面发送请求url总是在src属性中添加1*1透明img如果不想要任何url

src="data:image/gif;base64,R0lGODlhAQABAAAAACwAAAAAAQABAAA="
Run Code Online (Sandbox Code Playgroud)

  • 这个 src `data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==` 有效 (3认同)
  • 这将在某些浏览器中显示为黑点。 (2认同)

ten*_*kod 9

我发现使用:

<img src="file://null">
Run Code Online (Sandbox Code Playgroud)

不会提出请求并正确验证.

浏览器将简单地阻止对本地文件系统的访问.

但是,Chrome中的控制台日志中可能会显示错误,例如:

Not allowed to load local resource: file://null/
Run Code Online (Sandbox Code Playgroud)

  • 关心解释下降投票吗?请注意,我不建议仅使用这种方法进行讨论。而且它满足了问题的要求,可以正确验证并且不提出其他要求。 (2认同)

Sha*_*ton 9

我发现只需将src设置为空字符串并向CSS添加规则以隐藏损坏的图像图标就可以了.

[src=''] {
    visibility: hidden;
}
Run Code Online (Sandbox Code Playgroud)

  • 注意,src 必须设置为 `''`,它不能是未定义的。 (3认同)

mys*_*dat 6

基于以下文章,使用真正空白,有效且高度兼容的SVG :

src="data:image/svg+xml;charset=utf8,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%3E%3C/svg%3E"

它的大小默认为任何SVG的300x150px,但您可以在img元素默认样式中使用它,就像在实际实现中的任何情况一样.


Joh*_*can 6

建立Ben Blank的答案,我在w3验证器中验证的唯一方法是:

<img src="/./.:0" alt="">`
Run Code Online (Sandbox Code Playgroud)