Как правильно определить поддержку прозрачности браузером?

У меня есть код 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 не имеет объекта фильтров? Есть ли лучший способ обнаружить это?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
2 053
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

То, что вы понимаете под фильтрами, называется непрозрачностью. Настоящие фильтры - это проприетарное расширение IE, которое, помимо прочего, обеспечивает непрозрачность для этого браузера.

Попробуйте эта статья для методов кроссбраузерной прозрачности.

Эквиваленты JS точно такие же, как описано: style.opacity или style.filter. Более вероятная проблема заключается в том, что ваш тип документа является переходным и / или элемент, который вы пытаетесь сделать прозрачным, не имеет магического hasLayout

Спасибо - понимаю, что это за фильтры. Я пытаюсь понять, как определить, какой тип непрозрачности поддерживает браузер, чтобы я мог делать правильные вещи в javascript.

Marplesoft 23.12.2008 01:30
Ответ принят как подходящий

В IE7 это filters, а в IE6 это filter.

Код ниже возвращает:

  • 'непрозрачность', если поддерживается style.opacity
  • 'фильтр' для фильтра MS (IE <7)
  • 'фильтры' для фильтров MS (IE7)
  • 'none' для всего остального

.

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 27.01.2011 02:16

@Ryley: Как вы говорите, это было очень давно, и я уже не помню подробностей. Я помню, что проводил тестирование и обычно копирую и вставляю свой тестовый код в ответ, так что я думаю, что сделал это и в этот раз. У меня больше не установлен IE6, поэтому я не могу его протестировать. После быстрого исследования я вижу, что на объекте существуют как минимум «фильтры», как в моем коде.

some 27.01.2011 21:30

@Ryley o.style.filter (s) не существует, но o.filter (s) делает так, что опубликованный код правильный.

CJ Dennis 16.08.2012 08:04

@some Microsoft выпускает ограниченную по времени бесплатную виртуальную машину с XP и IE6 для тестирования. Обычно его нужно скачивать раз в три месяца.

CJ Dennis 16.08.2012 08:09

@CJDennis Большое спасибо. Я слышал об этом около года назад, но не использовал. Я давно отказался от поддержки MSIE6.

some 16.08.2012 15:19

Другие вопросы по теме