7

私はASP.NET Webアプリケーションで図形を描いています。 IE9などのブラウザでは、私はSVGでそれをやっています。 IE8以降では、VMLを使用しています。 IE8標準モード(互換性ビューを使用していない)でIE8がVMLを表示しないことがわかりました。IE9、IE8、SVG、VML、doctypes

私のdoctypeが<!DOCTYPE html>に設定されています。 doctypeを完全に消してしまえば、IE8はquirksモードになり、うまく動作しますが、IE9は quirksモード(IE9標準の代わり)に行き、SVGを表示しません。

これはテストページで発生しているため、<svg>要素またはその子要素またはVML要素のいずれかを含むdivを含むフォーム以外には何もありません。

ここでは何が起こっていますか? Stack Exchangeのユーザーページの評判グラフは、IE8以下のVML、他の人のSVG、HTML5 doctypeなどと同じように動作するように見えます。

+0

Doctypeで条件文を使用することについて考えましたか? '<! - [if IE 8]><!doctype ...>'あなたの求めるものではないことは分かっていますが、それは別の解決策かもしれません。 – Eruant

答えて

3

IE8標準モードでのVMLの名前空間を宣言するためには、第三'#default#VML' argumentを含める必要があります:

document.namespaces.add('v', 'urn:schemas-microsoft-com:vml', '#default#VML'); 

あなたが知っておく必要があるかもしれませんIE8でのVMLにother changesがあります。行動ルールの

セレクターを変更する必要がある:

+0

私は実際にIE7の標準モードを強制してすべてを動かすという、彼の提案を底に使っています。それがIE8の場合は、 'Response.AppendHeader(" X-UA-Compatible "、" IE = EmulateIE7 ");' –

5

は、あなたがチェックする必要があり、より物事のカップルがあります。

  • 要素の寸法または位置を設定する場合、単位のデフォルトはpxではありません。これは明示的に動作するように指定する必要があります。
  • あなたはDOMの外VML要素を作成することはできません:

var vmlFrag = document.createDocumentFragment(); 
vmlFrag.insertAdjacentHTML('beforeEnd', 
'<v:rect id="aRect" fillcolor="red"   
style="top:15px;left:20px;width:50px;height:30px;position:absolute;"></v:rect>' 
); 
document.body.appendChild(vmlFrag); 
  • RECT要素は表示されません!おそらくちょうどブラウザをクラッシュさせるように、CSSを修正することはできません。しかし、そこには修正があります。要素のouterHTMLをそれ自身にコピーします。

var aRect = document.getElementById('aRect'); 
aRect.outerHTML = aRect.outerHTML; 
1

HighChartsソースコードは解決策を示しました。実行時に名前空間を追加するだけでなく、あなたはまた、特定のCSSの動作を追加する必要があります。その後

<!--[if lte IE 8 ]> 
<script type="text/javascript"> 
    document.namespaces.add('vml', 'urn:schemas-microsoft-com:vml'); 
    document.createStyleSheet().cssText = 
     'vml\\:fill, vml\\:path, vml\\:shape, vml\\:stroke' + 
     '{ behavior:url(#default#VML); display: inline-block; } '; 
</script> 
<![endif]--> 

を、要素作成したjsがページに表示されます。 Watch the demo

+0

あなたのソリューションは私のために働きます.. – SivaRajini

関連する問題