2

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

4

2 回答 2

5

在 IE7 中是 filter 在 IE6 中是 filter。

下面的代码返回:

  • '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 支持的条件注释。

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

According to quirksmode MS has changed the CSS from filter to -ms-filter so I don't know what result you get with IE8.

According to mozilla opacity has been supported since FF 0.9, Opera 9 and Safari 1.2 and filter since IE4.

I don't like to do browser sniffing, but sometimes it is necessary and conditional comments make it so much easier to handle specific IE things.

于 2008-12-23T10:43:54.607 回答
2

您所理解的过滤器称为不透明度。真正的过滤器是一个专有的 IE 扩展,它可以使该浏览器的许多其他内容不透明。

试试这篇文章了解跨浏览器透明度技术。

JS 等效项与描述的完全相同:style.opacity 或 style.filter。更可能的问题是您的文档类型是过渡性的和/或您尝试使其透明的项目没有神奇的hasLayout

于 2008-12-22T22:21:55.197 回答