我有一个图像,我会动态填充与src稍后用javascript,但为了方便我想图像标记存在页面加载但只是不显示任何东西。我知道<img src='' />
是无效的,所以最好的方法是什么?什么是包含没有src的图像的有效方法?
回答
虽然没有有效的方法来省略图片的来源,但是来源,不会导致服务器点击。我最近与iframe
s有类似的问题,并确定//:0
是最好的选择。不完全是!
从//
开始(省略协议)会导致使用当前页面的协议,从而防止HTTPS页面中的“不安全内容”警告。跳过主机名不是必需的,但使其缩短。最后,端口号:0
可确保无法提出服务器请求(根据规范,它不是有效的端口)。
这是我发现的唯一URL,它在任何浏览器中都没有导致服务器点击或错误消息。通常的选择 - javascript:void(0)
- 如果在通过HTTPS提供的页面上使用IE7,将导致“不安全内容”警告。任何其他端口都会导致尝试连接服务器,即使是无效地址。 (有些浏览器会发出无效请求并等待它们超时。)
这已经在Chrome,Safari 5,FF 3.6和IE 6/7/8中测试过,但我期望它可以在任何浏览器,因为它应该是杀死任何尝试请求的网络层。
这个答案会导致你的防火墙警告你访问端口0的例子。或者它可能会导致服务器安全日志。建议'about:blank'的答案可能是更好的解决方案。 – 2013-01-22 15:47:24
这造成了一个破碎的图像图标为我显示。任何人看到这个?我正在使用最新的Firefox(27)。 – dmikester1 2014-02-11 20:00:20
这也失败了w3c验证器:错误值:0:对于元素上的属性src img:无效主机:空主机。 – ysrb 2014-08-07 14:28:30
我建议动态地添加的元素,如果使用jQuery或其他JavaScript库,这是很简单的:
还看prepend
和append
。否则,如果你有一个这样的图像标签,并且你想要验证它,那么你可能会考虑使用一个虚拟图像,比如1px透明gif或者png。
+1这是最好的答案。如果图像源是动态设置的,则应该动态添加整个元素。如果你不希望它在src设置之前可见,我想不出有什么好的理由说明为什么元素应该在那之前。 – 2014-05-19 16:06:53
我有一段时间没有这样做,但我不得不经历一次同样的事情。
<img src="about:blank" alt="" />
是我的最爱 - 在//:0
一个暗示,你会尝试对端口零原始服务器的HTTP/HTTPS连接(tcpmux端口?) - 这可能是无害的,但我而不是反正。哎呀,浏览器可能会看到端口为零,甚至不发送请求。但是,如果这可能不是您的意思,我宁愿不要这样指定它。
反正,
about:blank
的渲染实际上在我测试的所有浏览器中都非常快。我只是把它扔进W3C验证器,它没有抱怨,所以它甚至可能是有效的。
编辑:不要这样做;它不适用于所有的浏览器(它会显示一个'破碎的图像'图标,正如在这个答案的评论中指出的那样)。使用下面的<img src='data:...
解决方案。或者,如果您不关心有效性,但仍希望避免对服务器的多余请求,则可以执行<img alt="" />
而不使用src属性。但是,这是无效 HTML所以仔细挑选。
测试显示大量不同方法的页面:
http://desk.nu/blank_image.php - 提供各种不同的文档类型和内容类型。
- 如下面的评论所述,使用Mark Ormston的新测试页面:http://memso.com/Test/BlankImage.html
这似乎比让网络层发出错误更清晰。 – 2013-01-22 15:41:02
至少你确定一个愚蠢的防火墙不会要求允许调用端口0 ... – 2013-01-22 15:46:11
值得一提的是,这显示在Chrome浏览器(也可能是其他浏览器)上的“破碎的图像”图标 – user568458 2013-08-28 14:58:56
另一种方法是嵌入空白图像。适合你的目标会做任何图像,但下面的例子编码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="" />
编辑基于以下注释:
当然,你必须考虑你的浏览器支持要求。不支持IE7或更低版本是值得注意的。 http://caniuse.com/datauri
好主意!然而,对我而言,这会杀死图像元素 - 如果任何人需要'img'元素的其他方面来显示例如背景和边框,请尝试'src =“data:image/gif; base64,R0lGODlhAQABAIAAAP /// wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw ==”'这取自1px x 1px透明gif我让Photoshop透过http://www.base64- image.de/ – user568458 2013-08-28 15:06:10
您可能需要考虑使用数据URI内联您的资源:http://www.mobify.com/blog/data-uris-are-slow-on-mobile/ – shawnjan 2013-09-01 19:08:39
此选项的可行性取决于您必须在哪些浏览器上支持:http://caniuse.com/datauri – 2013-11-06 00:37:55
我个人使用的about:blank
src
并通过img
元素的透明度设置为0
处理断开的图像图标。
现在,这是肮脏的! – mystrdat 2014-12-10 14:40:41
@mystrdat:谨慎地阐述为什么它很脏?接受的答案,使用“//:0”仍然给了我一个破碎的图像图标加上一个奇怪的永不停止的请求在Firefox上。使用作为占位符的单像素base64 png替代品也有很多投票,给我带来了麻烦,无论是否指定高度和宽度。这是我找到的最干净的方式,可以在没有任何不必要的请求并通过所有短消息和验证的情况下实现我的目标。 – Miguel 2015-02-12 19:12:35
以上所有解决方案都非常愚蠢,包括一个可以接受的解决方案,一旦我获得更多时间,我会做出新的答复。 – mystrdat 2015-02-12 21:17:02
,如果你继续src属性空的浏览器会发送请求到当前页面的URL 随时添加在src属性1 * 1透明IMG如果不希望任何URL
src="data:image/gif;base64,R0lGODlhAQABAAAAACwAAAAAAQABAAA="
写在注释,这种方法是错误的。
之前我没有找到这个答案,但acording到W3 Specs有效空src
标签将是一个锚链接#
。
示例:src="#"
,src="#empty"
页验证成功并没有额外的要求制成。
我发现,使用:
<img src="file://null">
不会让一个请求,正确验证。
浏览器将简单地阻止对本地文件系统的访问。
但也有可能,例如显示在控制台登录Chrome的一个错误:
Not allowed to load local resource: file://null/
谨慎解释downvote?请注意,我不推荐使用这种方法只是提供一个讨论的案例。它能够满足问题的要求,正确验证并且不会提出其他请求。 – tenkod 2015-08-28 18:15:41
使用一个真正的空白,有效和高度兼容SVG,在此基础上article:
src="data:image/svg+xml;charset=utf8,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%3E%3C/svg%3E"
与SVG一样,它的默认大小为300x150像素,但您可以在img
元素的默认样式中使用该元素,正如您在实际实现中可能需要的那样。
感谢您更新您的答案,但是我怀疑它的兼容性比其他数据 - uri解决方案更糟糕,因为您使用的svg在IE9之前不兼容。幸运的是,这是一段时间,因为我不得不支持传统的IE浏览器,但它仍然与一些人有关。 – funkylaundry 2016-06-07 10:35:13
它应该以IE9的方式工作。 – mystrdat 2016-06-07 12:53:04
但是,这是否会遇到与本文中相同的问题? http://dev.mobify.com/blog/data-uris-are-slow-on-mobile/。我在考虑使用css img [src =“about:blank”] {opacity:0}解决方案的选项是最好的。或者,如果旧版浏览器不支持CSS级别的选择器,只需给img标签添加一个类似“load-in”的类,或者其他的东西。更好的是,给它一个类,使用JavaScript来交换数据-Src,然后设置一个加载函数给图像,使其在加载时淡入淡出。您还可以设置一个微调器在加载时显示。看起来很专业。 – 2016-09-17 13:41:55
简单地说,就像这样:
<img id="give_me_src"/>
我发现,简单地设置在src为空字符串,并添加规则,以你的CSS隐藏断开的图像图标工作得很好。
[src=''] {
visibility: hidden;
}
[ ng-src =''] { visibility:hidden; } 如果您在angularjs中使用ng-src指令 – 2018-01-31 20:17:41
<img src="invis.gif" />
凡invis.gif是单像素透明GIF。这在未来的浏览器版本中不会中断,并且自90年代以来一直在传统浏览器中工作。
PNG应太,但在我的测试中,GIF为43个字节,PNG为167个字节,因此GIF赢了。
p.s.不要忘记alt标签,验证者也喜欢它们。
大厦关闭本·布兰克的回答,我得到这个在W3的验证验证的唯一办法是,像这样:
<img src="/./.:0" alt="">`
- 1. 求解包含digamma函数的方程组的最有效方法是什么?
- 2. 在页面上包含API的最有效方式是什么?
- 3. 有没有包含的方法?
- 4. 什么是生成包含'key1'到'keyN'的列表的最有效方法?
- 5. 什么是减少(组合)包含对象的数组最有效的方法?
- 6. 为什么scala的并行序列没有包含方法?
- 7. 有没有什么办法从tinymce中提取图像的src属性?
- 8. 是否有什么方法可以得到所有你的src包
- 9. 绑定没有克隆方法,什么是复制它的有效方法
- 10. 有没有什么方法可以知道目录是否包含子目录?
- 11. 什么是最有效的方式来存储500.000图像?
- 12. 什么是在PHP页面中包含许多JavaScript函数(包含PHP)的最有效方法?
- 13. 检查图像是否为图像的最有效方法PHP
- 14. 包含图像的mongodb结果的高效和有效返回
- 15. 为什么没有有效的方法工作?
- 16. 什么是更有效的MySQL或包含文件
- 17. 什么是覆盖位图数据的最有效方法
- 18. Xcode 4.2:什么是切换视图最有效的方法?
- 19. 有没有什么方法从c#中的摄像头获取3D图像?
- 20. 为什么父母的div没有与包含的图像相同的大小?
- 21. 在Android UI中旋转和显示图像的最有效方法是什么?
- 22. 在Android中将图像转换为Base64的最有效方法是什么?
- 23. Canvas vs DOM - HTML5中最有效的图像显示方法是什么?
- 24. Java中的int.class包含了什么?为什么它甚至是有效的?
- 25. 写出工厂方法最有效的方法是什么?
- 26. TypeScript包含没有JS库的@types的原理是什么?
- 27. 是否有像getClassInfo这样的包含样式的方法?
- 28. 重绘图像的最有效方法
- 29. 为什么我的图标在图像上的“src”属性后没有改变?
- 30. 什么是从图像中提取没有阴影的主色的好方法?
这是一个比较古老的问题,但它是值得考虑的是与图像没有src本质上是没有意义的,这就是为什么规范说image *必须有一个src指向一些嵌入式资源。如果你正在考虑的有效性和/或语义,你是通过完全省略图像和事后添加的,因为HTML不提供一种方式来指定将与以后的数据来填充一个占位符图像更好的服务。 – BoltClock 2016-02-16 09:22:14
在使用米卡Tuupola的延迟加载jQuery插件,它使用标记“”,所以从某种意义上讲,你需要指向一个来源,但它并没有要与src属性来完成。 – iWillGetBetter 2016-10-05 06:51:32