0

これは、ブラウザでVMLサポートを検出するために使用される機能です。これは、古いバージョンのIEにborder-radiusおよびdrop-shadow機能を提供するためのhtmlコンポーネントファイルの一部です。私はこれを私に説明したいと思います、それの段階的な論理:

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. supporstVml.supportedとは何ですか?これは変数ですか、ファイル内の他の場所で宣言されているのはわかりません...
  2. url(#default#VML)の動作は何ですか?
  3. supportVml.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 に答える