如何正确检测浏览器对不透明度的支持?

时间:2008-12-22 22:16:08

标签: javascript internet-explorer transparency opacity filter

我有一些应用alpha透明度的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没有过滤器对象?有没有更好的方法来检测这个?

2 个答案:

答案 0 :(得分:5)

在IE7中,它是过滤器 s ,在IE6中它是过滤器。

以下代码返回:

  • 'opacity'如果支持style.opacity
  • '过滤器'用于MS过滤器(IE <7)
  • 过滤器用于MS过滤器(IE7)
  • '没有'其他一切

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@if@_jscript用于只有IE支持的conditional comment

我在FF3,IE6,IE7,Opera9和Chrome 1上测试了这个,但在IE4,5或8上没有。

根据quirksmode MS已将CSS从过滤器更改为 -ms-filter ,因此我不知道您使用IE8获得的结果。< / p>

根据mozilla opacity 自FF4以来,支持自FF 0.9,Opera 9和Safari 1.2以及 filter

我不喜欢做浏览器嗅探,但有时它是必要的,并且有条件的注释使得处理特定的IE事情变得更加容易。

答案 1 :(得分:2)

您理解为滤镜的内容称为不透明度。真正的过滤器是专有的IE扩展,它为该浏览器提供了许多其他功能的不透明度。

尝试使用this article进行跨浏览器透明度技术。

JS等价物与描述完全相同:style.opacity或style.filter。更可能的问题是,您的doctype是过渡性的和/或您尝试透明的项目没有神奇的hasLayout