IE互換モード時にiFrame内のHTMLでX-UA-Compatibleを指定した場合のUserAgent
IEの互換モードにいじめられたので備忘
おまじない
IEの互換モードが有効な場合でも各バージョン最新のレンダリングをして欲しい時のおまじない
<meta http-equiv="X-UA-Compatible" content="IE=edge">
通常はこれで問題ないがiFrameの中に読み込まれる場合に注意が必要
iFrameの内側でX-UA-Compatibleを指定
<html>
<head>
<meta charset="UTF-8">
<title>互換モードの闇</title>
<script type="text/javascript">
window.onload = function(){
document.getElementById('uavalue').innerText = navigator.userAgent;
}
</script>
</head>
<body>
<div>UserAgent : <span id="uavalue"></span></div>
<iframe src="in.html"></iframe>
</body>
</html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>iFrameの内側</title>
<script type="text/javascript">
window.onload = function(){
document.getElementById('uavalue').innerText = navigator.userAgent;
}
</script>
</head>
<body>
<span>ieEdgePage</span>
<div>UserAgent : <span id="uavalue"></span></div>
</body>
</html>
上記のようなhtmlをIE7〜11ぐらいの互換モードで開くと
out.htmlでは互換モードによってIE7っぽいUAが、
in.htmlでは各ブラウザのUAが表示される。
…と思いきやIE11ではIE8っぽいUAが表示される。
IE=Edgeが指定されているin.htmlもIE7っぽくレンダリングされるため、CSS3を利用した角丸ボタンは四角いボタンとなる。
つらいやつ
in.htmlでUAによってバージョン判定をして処理を振り分けたりするとつらいことになる場合がある。
例えばIE10以降はhtml5のaudio、IE10未満はWindowsMediaPlayerプラグインで再生…みたいなことをしていると、IE10で死ぬ。
IE10のUAはIE10っぽいのでjavascriptでaudioを作ろうとするが、レンダリングはIE7っぽいので落ちる。つらい。
IE11はなぜかIE8っぽいUAなのでWMP側に割り振られて救われる。ラッキー。
UAで判断せずにcreateElement('audio');
したうえでcanPlayType
で判断しましょう?
おまけ
IE11の開発者ツールで各バージョンをエミュレートしても、やっぱそれぞれのIEで見ないとだめです。
エミュレートのIE8では綺麗に表示されるしjsもちゃんと動くのに本物のIE8では崩れたりjsがエラーになることまれによくある。つらい。
結論
IE滅べ今なう💢
Author And Source
この問題について(IE互換モード時にiFrame内のHTMLでX-UA-Compatibleを指定した場合のUserAgent), 我々は、より多くの情報をここで見つけました https://qiita.com/tomatosum/items/3315779ed5c5a1164ed5著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .