Как определить браузер, который не отображает прозрачность .png - PullRequest
3 голосов
/ 10 августа 2011

У меня есть этот код, который отображает изображение в соответствии с днем ​​недели.Но в IE6 и ниже и, возможно, в некоторых других браузерах он не отображает непрозрачность png.Поэтому я хочу немного изменить его, чтобы он обнаруживал браузеры, которые не отображают альфа-прозрачность, и велел им загружать это изображение: «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 ]

3 голосов
/ 11 августа 2011

Я провел достаточное количество исследований по этому вопросу и пришел к выводу, что создать функциональный тест в 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);

ОБНОВЛЕНИЕ 17 июня 2012

Обратите внимание, что IE 10 не будет поддерживать условные комментарии , поэтому этот подход не будет работать в будущих версиях IE.

2 голосов
/ 10 августа 2011

Условные комментарии:

<!--[if IE 6]>
<script>
var ie6 = true;
</script>
<![endif]-->
1 голос
/ 10 августа 2011

Я не думаю, что есть хороший, общий способ определения, поддерживается ли прозрачность png.Однако в настоящее время я поддерживаю все основные браузеры, за исключением IE6 и очень редко IE5.5.Я не думаю, что вам придется разумно беспокоиться о любых других случаях.

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

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

Взято из здесь .

0 голосов
/ 10 августа 2011

IE6 может визуализировать прозрачность png с помощью нестандартного фильтра CSS , который вызывает DirectX для обработки прозрачности от имени IE.

Что касается других браузеров, только IE был достаточно глуп, чтобы добавить только частичную поддержку PNG. Если браузер поддерживает png, вы можете смело предполагать, что он также поддерживает прозрачность (за исключением случаев, когда это IE).

...