2012-03-13 7 views
13

誰かが既にasked my question about detecting SVG support in browsersを持っていますが、3つの主要な解決策があり、それぞれのメリットについて多くの議論がありません。SVGサポートの検出方法はどれですか?

So:もしあれば、これが最適ですか?移植性と正確性の面では、そうです。偽陰性(すなわち、「no svg」)は望ましくないが許容される。偽陽性はありません。

別紙A:

var testImg = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNzUiIGhlaWdodD0iMjc1Ij48L3N2Zz4%3D'; 

var img = document.createElement('img') 

img.setAttribute('src',testImg); 

return img.complete; 

別紙B:

return document.implementation.hasFeature(
    "http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1"); 

別紙C:

return !! document.createElementNS && 
     !! document.createElementNS (
      'http://www.w3.org/2000/svg', 
      "svg") 
     .createSVGRect; 
+1

「最良」のためのあなたの適性基準は何ですか?おそらく、質問やタイトルを変更して、「過去3年以内にリリースされたブラウザでこれらのいずれかが失敗(偽陰性または肯定的なもの)になるか」などの具体的かつ回答可能な質問をする必要があります。さもなければ、この質問は主観的に閉じるために熟しています。 – Phrogz

答えて

-1

私はおそらくmodernizrを使用します。

+10

それは下のCと同じように見えます。 – spraff

+1

あなたがモダリザがどの方法を使用するのか、なぜそれが良いのかを気にしない限り、非常に有用な答えではありません。フィーチャー検出はライブラリーに依存する必要はなく、ライブラリーはある種の検出そのものを使用する必要があります。 –

1

現在、Modernizrは<img>タグのSVGのサポートを検出するためにアプローチBを使用し、<embed>および<object>タグのSVGのサポートを検出するためにCにアプローチします。 「SVG as img」のサポートを検出するためにAのようなアプローチを使用していたようですが、Bの方が優先されました(詳細についてはthis post CSSトリックを参照してください)。

結果的に、テストする内容に応じて、現時点ではBまたはCのいずれかが最適なアプローチになるようです。

28

このためにModernizrライブラリ全体を含める必要はありません。ここで私は、私が過去に使用したきた簡単なチェックです:

typeof SVGRect !== "undefined"; // true if supported, false if not 

は、これは非常に単純SVG Specificationに定義されているSVGRectオブジェクトのサポートのためにチェックします。 Chrome typeof SVGRect"function"で、IE9では"object"ですが、SVG(IE8など)をサポートしていないブラウザでは"undefined"を返します。上記のコードでは

、あなたは単にすることができます:

if (typeof SVGRect !== "undefined") { ... /* If the browser does support SVG. */ } 
else { ... /* If the browser does not support SVG. */ } 
関連する問題