トップ回答者
Yahooツールバーを導入したIE11で、互換モード時のUAがEdgeモードのものになります

質問
-
Yahooツールバーを導入したIE11で、互換モード時のUAがEdgeモードのものになります。
ドキュメントモードやmouseイベントは互換モードとして動いているため、UAもIE7のものが必要です。
本件につきまして、開発者ツールを用いてUAを明示的に設定する、以外の問題解決方法がありましたら
ご教授いただけますようお願い致します。
[事象の概要]
Win7環境のIE11で、x-ua-compatible=EmulateIE7を指定されたサイトでのUAは
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/7.0)
になる、と想定しています。
ですが、Yahooツールバーを導入している場合は
Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko
のUA(EdgeモードのUA)になります。
※WOW64、YTB730等の細かい箇所は省略しています
[事象の起こし方]
1. Yahooツールバーを導入したIE11で、Yahooツールバーを「表示」の状態で起動する
2.Yahooツールバーの「Y!」ボタンをクリックし、Yahooサイトに遷移する
3.x-ua-compatible=EmulateIE7が指定されたサイトに遷移する
4.遷移後の画面でUAがEdgeモードのものになる
[UAの確認方法]
・アドレスバーで以下のjavascriptを実行しました。
javascript:alert(navigator.userAgent)
[確認した環境]
・Windows7 64bit
・Internet Explorer 11 32bit版
・Yahooツールバー ver7.30
[備考]
事象発生時に開発者ツールを開き、以下の記載を確認しています。
・ドキュメントモード:7(規定)
・ユーザエージェント文字列:規定
x-ua-compatibleはhtmlタグ>headタグの直後に指定してます( metaタグ指定以前の外部リソースへのアクセスなし)
ドキュメントモードの記載からも、互換モードの指定は有効になっていると思われます。
事象発生中にjavascriptでmousedownのイベントを拾ったところ、左クリックで「1」が取得されました。
(ドキュメントモードが8以前の戻り値。9以降では「0」が取れる想定です)
開発者ツールを用いて、ユーザエージェント文字列を規定以外に変更すると、正しく反映されます。
また、その後に「規定」に戻しても、IE7のUAが返されます。
Yahooツールバーを非表示にした場合は、事象が発生せず、IE7モードのUAが表示されました。(非表示の場合もUAにYTB730の文字列は付与されます)
また、googleツールバーでは事象は発生しませんでした。
※表示/非表示を切り替えた際にはIE自体を再起動しています
以上になります。
問題の原因がIE11かYahooツールバーかの判断はできなかったため、こちらに投稿させていただきました。
よろしくお願い致します。- 編集済み mizk 2014年3月4日 6:42
回答
すべての返信
-
ご返信ありがとうございます。
Yahoo! ツールバーをインストールしない環境では、本事象は発生しません。
問題となるロジックが、不特定多数の方が利用するWEBアプリケーション上で使用するもののため
ツールバーの使用に制限を掛けることは困難です。
(mousedownの左クリックの値がIE8以前と他ブラウザで異なるため、互換モードに寄せてUAでIEを切り分けています)
アプリケーションを改修する場合は
・UAの判別にTridentを含める
・UA情報に依存しない各ブラウザのサポート機能の有無で判別する(IE全般ならばdocument.uniqueID)
等の形で解決が可能です。
jquery.browserを使用している等で、別のシステムでも同様の事象に遭遇されるケースがあるのではないかと思い
情報共有および改修以外の解決方法の模索を目的として、質問を投稿させていただいています。 -
mizk さん、ご返信ありがとうございます。他の開発者の皆さんにも有益な情報のご提供と思います。
なおご存知かもしれませんが、ブラウザーごとの動作の違いに対応する場合、ブラウザーのバージョンを判定するのではなく、ブラウザーの機能を判定する方法 (feature detection) が推奨されています。ご参考まで。
hebikuzure
-
(mousedownの左クリックの値がIE8以前と他ブラウザで異なるため、
事象発生中にjavascriptでmousedownのイベントを拾ったところ、左クリックで「1」が取得されました。
(ドキュメントモードが8以前の戻り値。9以降では「0」が取れる想定です)なら、document.doumentMode では。
ところで、0 or 1で判定すれば、調べる必要もなくなるのでは。ダメ、中ボタンの場合がある。
- 編集済み ウィンドウズスクリプトプログラマ 2014年3月6日 13:27
- 回答の候補に設定 Hebikuzure aka Murachi AkiraMVP, Moderator 2014年3月7日 6:05
-
hebikuzureさん
feature detectionの参考資料を、どうもありがとうございます。
環境やユーザで、変更や隠ぺいが可能なUAを見るより
ブラウザの機能で判別する方法の方が優れていると思います。
改修の際には、その形で対応すべきと考えています。
ウィンドウズスクリプトプログラマさん
IE11よりx-ua-compatibleも非推奨となりましたし
document.uniqueIDでIEを切り分けるより、document.documentModeの方が柔軟性に富んでいて良いと思いました。
ご助言、ありがとうございます。
仰る通り、中ボタンの場合があるため
既存のロジックは0、1を区別して判定しています。