0

这是一个用于检测浏览器中的 VML 支持的函数。它是 html 组件文件的一部分,用于为旧版本的 IE 提供边框半径和阴影功能。我想向我解释一下它的分步逻辑:

function supportsVml() {
    if (typeof supportsVml.supported == "undefined"){
        var a = document.body.appendChild(document.createElement('div'));
        a.innerHTML = '<v:shape id="vml_flag1" adj="1" />';
        var b = a.firstChild;
        b.style.behavior = "url(#default#VML)";
        supportsVml.supported = b ? typeof b.adj == "object": true;
        a.parentNode.removeChild(a);
    }

    return supportsVml.supported
}

我感到困惑的地方:

  1. 什么是 supportVml.supported?这是一个变量吗,我没有看到它在文件中的其他任何地方声明...
  2. 什么是 url(#default#VML) 行为?
  3. supportsVml.supported 根据条件重新分配了一个新值,但我不知道是什么或为什么......

谢谢!

4

1 回答 1

2

supportsVml.supported是函数的一个属性,仅用作结果的缓存。

如果是undefined(在第一次调用之前),则运行检测算法。之后只使用缓存的值并省略检测。

实际的检测算法会尝试添加一个默认的 VML 元素并检查它是否被正确插入。如果是这样,则支持 VML。

编辑

可以将behavior脚本附加到元素的 CSS(链接)。据我所知,这是旧版 IE 独有的。

supportsVml.supported = b ? typeof b.adj == "object": true;

此行使用三元运算符。可以改写如下:

if ( b ) {
  if ( b.adj == 'object' ) {
    supportsVml.supported = true;
  } else { 
    supportsVml.supported = false;
  }
} else {
  supportsVml.supported = true;
}
于 2012-08-21T13:41:21.167 回答