代码之家  ›  专栏  ›  技术社区  ›  Marplesoft

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

  •  2
  • Marplesoft  · 技术社区  · 17 年前

    我有一些应用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 回复  |  直到 17 年前
        1
  •  5
  •   some    17 年前

    在IE7中是过滤器 S 在IE6中是过滤器。

    下面的代码返回:

    • 如果支持style.opacity,则为“opacity”
    • MS筛选器的“筛选器”(即<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 在A中使用 conditional comment 只有IE支持。

    我在ff3、ie6、ie7、operat9和chrome 1上测试过这个,但在ie4、5或8上没有。

    根据 quirksmode MS已将CSS从 滤波器 - MS滤波器 所以我不知道你用IE8会得到什么结果。

    根据 mozilla opacity 从FF 0.9、Opera 9和Safari 1.2起就得到了支持, filter 自IE4以来。

    我不喜欢做浏览器嗅探,但有时它是必要的,有条件的评论使它更容易处理特定的IE事情。

        2
  •  2
  •   annakata    17 年前

    你所理解的过滤器叫做不透明度。真正的过滤器是一个专有的IE扩展,它为该浏览器提供了不透明度。

    尝试 this article 对于跨浏览器透明技术。

    JS等价物与所描述的完全相同:style.opacity或style.filter。更可能的问题是,您的doctype是过渡性的,并且/或者您试图使其透明的项目不具有魔力。 hasLayout