如果html的src属性为<;img>;无效吗?
有没有办法在属性无效(仅使用HTML)的HTML如果html的src属性为<;img>;无效吗?,html,image,Html,Image,有没有办法在属性无效(仅使用HTML)的HTML中呈现默认图像?如果不是,你会用什么轻量级的方法来解决这个问题 <style type="text/css"> img { background-image: url('/images/default.png') } </style> img{ 背景图像:url('/images/default.png') } 请确保输入图像的尺寸,以及您是否希望图像平铺。您要求的是仅HTML的解决方案 对象测试 使用J
中呈现默认图像?如果不是,你会用什么轻量级的方法来解决这个问题
<style type="text/css">
img {
background-image: url('/images/default.png')
}
</style>
img{
背景图像:url('/images/default.png')
}
请确保输入图像的尺寸,以及您是否希望图像平铺。您要求的是仅HTML的解决方案
对象测试
使用Jquery,您可以执行以下操作:
$(document).ready(function() {
if ($("img").attr("src") != null)
{
if ($("img").attr("src").toString() == "")
{
$("img").attr("src", "images/default.jpg");
}
}
else
{
$("img").attr("src", "images/default.jpg");
}
});
window.onload = function() {
fixBrokenImages('example.com/image.png');
}
这对我很有效。也许您想使用JQuery来钩住事件
<img src="foo.jpg" onerror="if (this.src != 'error.jpg') this.src = 'error.jpg';">
演示:
正如fiddle所示,损坏的图像本身不会被删除,但这可能会解决大多数情况下没有任何JS或CSS的问题。如果您需要在不同的位置应用不同的图像,只需使用class:进行区分。我的特例img:before{…
我认为仅仅使用HTML是不可能的。但是使用javascript这应该是可行的。基本上,我们在每个图像上循环,测试它是否完整,如果它的自然宽度为零,那么这意味着找不到它。代码如下:
fixBrokenImages = function( url ){
var img = document.getElementsByTagName('img');
var i=0, l=img.length;
for(;i<l;i++){
var t = img[i];
if(t.naturalWidth === 0){
//this image is broken
t.src = url;
}
}
}
在Chrome和Firefox中测试任何图像,只需使用以下javascript代码:
if (ptImage.naturalWidth == 0)
ptImage.src = '../../../../icons/blank.png';
其中,pImage
是通过文档获得的
标记地址。getElementById()
在第三版的Spring中找到了此解决方案
更新:
这不是唯一的HTML解决方案…onerror
是javascript如果您使用的是Angular/jQuery,那么这可能会有所帮助…
<img ng-src="{{item.url}}" altSrc="{{item.alt_url}}" onerror="this.src = $(this).attr('altSrc')">
解释
假设item
有一个属性url
可能为空,当它为空时,图像将显示为已损坏。这将触发执行onerror
属性表达式,如上所述。您需要如上所述覆盖src
属性,但需要jQuery访问altSrc.Co不能让它与香草JavaScript一起工作
可能看起来有点粗糙,但在我的项目上节省了时间。上述解决方案不完整,它缺少属性src
this.src
和this.attribute('src')
不一样,第一个包含对图像的完整引用,例如http://my.host/error.jpg
,但该属性仅保留原始值,error.jpg
正确的解决方案
<img src="foo.jpg" onerror="if (this.src != 'error.jpg' && this.attribute('src') != 'error.jpg') this.src = 'error.jpg';" />
没有办法确定无数的客户(浏览器)会试图查看你的页面。考虑的一个方面是电子邮件客户端是事实上的Web浏览器,可能无法处理这样的骗局……
同样地,您还应该包括一个默认宽度和高度的alt/text,如下所示。这是一个纯HTML解决方案
alt="NO IMAGE" width="800" height="350"
因此,另一个好的答案将稍微修改如下:
<img src="foo.jpg" onerror="if (this.src != 'error.jpg') this.src = 'error.jpg';" alt="NO IMAGE" width="800" height="350">
我对Chrome中的object标签有问题,但我想这也适用于它
您可以进一步设置alt/文本的样式,使其非常大
所以我的答案是使用Javascript,并提供一个很好的alt/text回退
我还发现了一个有趣的问题:一个带有JQuery的模块化版本,在文件末尾添加以下内容:
<script>
$(function() {
$('img[data-src-error]').error(function() {
var o = $(this);
var errorSrc = o.attr('data-src-error');
if (o.attr('src') != errorSrc) {
o.attr('src', errorSrc);
}
});
});
</script>
角度2:
<img src="{{foo.url}}" onerror="this.src='path/to/altimg.png'">
仅限HTML的解决方案,其中唯一的要求是您知道要插入的图像的大小。不适用于透明图像,因为它使用背景图像作为填充
我们可以成功地使用背景图像
链接给定图像丢失时出现的图像。然后唯一的问题是损坏的图标图像-我们可以通过插入一个非常大的空字符将其删除,从而将内容推到img
的显示之外
img{
背景图像:url(“http://placehold.it/200x200");
溢出:隐藏;
}
img:以前{
内容:“;
字体大小:1000px;
}
缺少此图像:
并且正在显示占位符
一个简单的img元素不是很灵活,所以我将它与一个picture元素结合起来。这样就不需要CSS。当出现错误时,所有srcset都设置为备用版本。不会显示断开的链接图像。它不会加载不需要的图像版本。picture元素支持r浏览器不支持的类型的响应式设计和多个回退
<picture>
<source id="s1" srcset="image1_not_supported_by_browser.webp" type="image/webp">
<source id="s2" srcset="image2_broken_link.png" type="image/png">
<img src="image3_fallback.jpg" alt="" onerror="this.onerror=null;document.getElementById('s1').srcset=document.getElementById('s2').srcset=this.src;">
</picture>
如果您使用的是Angular 1.x,则可以包含一条指令,允许您回退到任意数量的图像。回退属性支持单个url、数组中的多个url或使用范围数据的角度表达式:
<img ng-src="myFirstImage.png" fallback="'fallback1.png'" />
<img ng-src="myFirstImage.png" fallback="['fallback1.png', 'fallback2.png']" />
<img ng-src="myFirstImage.png" fallback="myData.arrayOfImagesToFallbackTo" />
谷歌把这个页面扔到了“image fallback html”关键字上,但由于上面没有帮助我,我一直在寻找“9以下IE的svg fallback支持”,我继续搜索,我发现:
<img src="base-image.svg" alt="picture" />
<!--[if (lte IE 8)|(!IE)]><image src="fallback-image.png" alt="picture" /><![endif]-->
这可能是离题了,但它解决了我自己的问题,也可能会帮助其他人。好吧!!
我觉得这样很方便,检查image的height属性是否为0,然后可以用默认image覆盖src属性:
image.setAttribute('src','../icons/.png');
//检查高度属性。如果图像可用,则默认情况下它将
//是100还是0
如果(image.height==0){
image.setAttribute('src','../icons/default.png');
}
除了精彩的答案之外,对于那些正在寻找跨平台angular js解决方案的人来说,这里是:
<object type="image/png" data-ng-attr-data="{{ url || 'data:' }}">
<!-- any html as a fallback -->
</object>
下面是我试图找到正确解决方案的一个例子:如果您创建了动态Web项目,并将所需的图像放置在WebContent中,则可以访问该图像
angular.module('app.services', [])
.directive('fallback', ['$parse', function ($parse) {
return {
restrict: 'A',
link: function (scope, element, attrs) {
var errorCount = 0;
// Hook the image element error event
angular.element(element).bind('error', function (err) {
var expressionFunc = $parse(attrs.fallback),
expressionResult,
imageUrl;
expressionResult = expressionFunc(scope);
if (typeof expressionResult === 'string') {
// The expression result is a string, use it as a url
imageUrl = expressionResult;
} else if (typeof expressionResult === 'object' && expressionResult instanceof Array) {
// The expression result is an array, grab an item from the array
// and use that as the image url
imageUrl = expressionResult[errorCount];
}
// Increment the error count so we can keep track
// of how many images we have tried
errorCount++;
angular.element(element).attr('src', imageUrl);
});
}
};
}])
<img src="base-image.svg" alt="picture" />
<!--[if (lte IE 8)|(!IE)]><image src="fallback-image.png" alt="picture" /><![endif]-->
image.setAttribute('src','../icons/<some_image>.png');
//check the height attribute.. if image is available then by default it will
//be 100 else 0
if(image.height == 0){
image.setAttribute('src','../icons/default.png');
}
<object type="image/png" data-ng-attr-data="{{ url || 'data:' }}">
<!-- any html as a fallback -->
</object>
<img src="Refresh.png" alt="Refresh" height="50" width="50">
<img src="img/Refresh.png" alt="Refresh" height="50" width="50">
<img src="foo.jpg" onerror="this.src='error.jpg';this.onerror='';">
<img src="some_image.tiff"
onerror="fallBackImg(this);"
data-fallIndex="1"
data-fallback1="some_image.png"
data-fallback2="some_image.jpg">
function fallBackImg(elem){
elem.onerror = null;
let index = +elem.dataset.fallIndex;
elem.src = elem.dataset[`fallback${index}`];
index++;
elem.dataset.fallbackindex = index;
}