У меня есть код javascript, который применяет альфа-прозрачность. Прежде чем это сделать, он пытается определить, какой тип прозрачности поддерживает браузер, и сохраняет его в переменной для дальнейшего использования. Вот как выглядит код:
// figure out the browser support for opacity
if (typeof br.backImg.style.opacity != 'undefined')
opacityType = 'opacity';
else if (typeof br.backImg.filters == 'object')
opacityType = 'filter';
else
opacityType = 'none';
Для Firefox и Safari первое условие истинно, для IE7 второе условие истинно, но для IE6 оно попадает в последнее условие. Почему IE6 не имеет объекта фильтров? Есть ли лучший способ обнаружить это?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


То, что вы понимаете под фильтрами, называется непрозрачностью. Настоящие фильтры - это проприетарное расширение IE, которое, помимо прочего, обеспечивает непрозрачность для этого браузера.
Попробуйте эта статья для методов кроссбраузерной прозрачности.
Эквиваленты JS точно такие же, как описано: style.opacity или style.filter. Более вероятная проблема заключается в том, что ваш тип документа является переходным и / или элемент, который вы пытаетесь сделать прозрачным, не имеет магического hasLayout
В IE7 это filters, а в IE6 это filter.
Код ниже возвращает:
.
var opacityType=(
(typeof o.style.opacity !== 'undefined') ? 'opacity' :
/*@cc_on @if (@_jscript)
(typeof o.filters === 'object') ? 'filters' :
(typeof o.filter === 'string') ? 'filter' :
@end @*/
'none'
);
@cc_on, @если и @_jscript используются в условный комментарий, который поддерживает только IE.
Я тестировал это на FF3, IE6, IE7, Opera9 и Chrome 1, но не на IE4,5 или 8.
Согласно quirksmode MS изменила CSS с фильтр на -ms-фильтр, поэтому я не знаю, какой результат вы получите с IE8.
Согласно мозилла, непрозрачность поддерживается с FF 0.9, Opera 9 и Safari 1.2 и фильтр с IE4.
Я не люблю обнюхивать браузер, но иногда это необходимо, а условные комментарии значительно упрощают обработку определенных вещей IE.
Это уже много лет, но @some, я думаю, вы хотели добавить в свой пример o.style.filters и o.style.filter?
@Ryley: Как вы говорите, это было очень давно, и я уже не помню подробностей. Я помню, что проводил тестирование и обычно копирую и вставляю свой тестовый код в ответ, так что я думаю, что сделал это и в этот раз. У меня больше не установлен IE6, поэтому я не могу его протестировать. После быстрого исследования я вижу, что на объекте существуют как минимум «фильтры», как в моем коде.
@Ryley o.style.filter (s) не существует, но o.filter (s) делает так, что опубликованный код правильный.
@some Microsoft выпускает ограниченную по времени бесплатную виртуальную машину с XP и IE6 для тестирования. Обычно его нужно скачивать раз в три месяца.
@CJDennis Большое спасибо. Я слышал об этом около года назад, но не использовал. Я давно отказался от поддержки MSIE6.
Спасибо - понимаю, что это за фильтры. Я пытаюсь понять, как определить, какой тип непрозрачности поддерживает браузер, чтобы я мог делать правильные вещи в javascript.