如何检测不呈现.png透明度的浏览器

时间:2011-08-10 18:39:03

标签: javascript png rendering browser-detection alpha-transparency

我有这个代码,根据一周的日期呈现图像。但是在IE6及更低版本以及其他一些浏览器中,它不会呈现png不透明度。因此,我想将其更改为litle,以便它将检测不呈现Alpha透明度的浏览器,并告诉他们加载此图像:“img / horarios2.png”。我已经尝试过制作它以便它排除IE6和更低的已知没有渲染,但后来我想到我可能不知道的所有其他浏览器也不会渲染任何需要的东西来统治它们也出去了。我不知道最好的方式来实现这一点,所以我对所有的消息都开放。

$(document).ready (function horario () {
var date = new Date();
var weekday = (date.getDay());

if (weekday==0)
    document.getElementById('horarios').src = "img/domingo.png";
else if (weekday==4)
    document.getElementById('horarios').src = "img/quinta.png";
else if (weekday==5)
    document.getElementById('horarios').src = "img/sexta.png";
else if (weekday==6)
    document.getElementById('horarios').src = "img/sabado.png";
else 
    document.getElementById('horarios').src = "img/quarta.png";
});

4 个答案:

答案 0 :(得分:3)

我已经对这个问题进行了大量的研究,得出的结论是在JavaScript中创建一个功能测试是不可行的,并且IE 6是唯一一个严重使用不支持的浏览器PNG透明度。在这种情况下,你最好的选择是加布里埃尔罗斯推荐的条件评论。可以在纯JavaScript中使用条件注释,我认为这就是你想要的:

var div = document.createElement("div");
div.innerHTML = "<!--[if lte IE 6]><i></i><![endif]-->";
var isIe6orLower = (div.getElementsByTagName("i").length == 1);

alert("Is IE 6 or lower: " + isIe6orLower);

2012年6月17日更新

请注意IE 10 will not support conditional comments,因此这种方法在IE的未来版本中不起作用。

答案 1 :(得分:2)

有条件的评论:

<!--[if IE 6]>
<script>
var ie6 = true;
</script>
<![endif]-->

答案 2 :(得分:1)

我认为没有一种好的,通用的方法可以检测是否支持png透明度。但是我现在所有的主流浏览器都支持它,除了IE6和很少IE5.5。我认为你不必合理地担心其他任何案件。

var badBrowser = (/MSIE ((5\.5)|6)/.test(navigator.userAgent) && navigator.platform == "Win32");

if( badBrowser ) {
    // change to "img/horarios2.png"
}

取自here

答案 3 :(得分:0)

IE6可以通过non-standard css filter呈现png透明度,它会调用directX来代表IE处理透明度。

至于其他浏览器,只有IE足够愚蠢才能添加部分PNG支持。如果浏览器支持png,你可以放心地假设它也处理透明度(除非它是IE)。