none
Yahooツールバーを導入したIE11で、互換モード時のUAがEdgeモードのものになります RRS feed

  • 質問

  • 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
    2014年3月4日 6:40

回答

  • Yahoo!に問い合わせを行い、ツールバーの改修を行っていただきました。
    本日回答をいただき、現在では上記の事象が発生しないことを確認しましたので
    本件はクローズとさせていただきます。

    UAでの判断が根本的な問題を含んでいることは認識しております。
    その点についてご指摘、ご教授くださった方々にはお礼申し上げます。
    どうもありがとうございました。

    • 回答としてマーク mizk 2014年3月14日 0:48
    2014年3月14日 0:48

すべての返信

  • Yahoo! ツールバーをインストールしない環境では発生しないのでしょうか。であれば、原因はツールバー側で IE の挙動ではないと思います。

    Yahoo! ツールバーを利用しないという回避策は適用できないのでしょうか。


    hebikuzure

    2014年3月4日 7:18
    モデレータ
  • UAもIE7のものが必要です。
    そんなもの見なきゃよいのでは。
    2014年3月4日 14:00
  • ご返信ありがとうございます。

    Yahoo! ツールバーをインストールしない環境では、本事象は発生しません。
    問題となるロジックが、不特定多数の方が利用するWEBアプリケーション上で使用するもののため
    ツールバーの使用に制限を掛けることは困難です。
    (mousedownの左クリックの値がIE8以前と他ブラウザで異なるため、互換モードに寄せてUAでIEを切り分けています)

    アプリケーションを改修する場合は
     ・UAの判別にTridentを含める
     ・UA情報に依存しない各ブラウザのサポート機能の有無で判別する(IE全般ならばdocument.uniqueID)
    等の形で解決が可能です。

    jquery.browserを使用している等で、別のシステムでも同様の事象に遭遇されるケースがあるのではないかと思い
    情報共有および改修以外の解決方法の模索を目的として、質問を投稿させていただいています。

    2014年3月5日 1:34
  • mizk さん、ご返信ありがとうございます。他の開発者の皆さんにも有益な情報のご提供と思います。

    なおご存知かもしれませんが、ブラウザーごとの動作の違いに対応する場合、ブラウザーのバージョンを判定するのではなく、ブラウザーの機能を判定する方法 (feature detection) が推奨されています。ご参考まで。


    hebikuzure

    2014年3月5日 6:20
    モデレータ
  • フォーラム オペレーターの星 睦美です。

    ウィンドウズスクリプトプログラマ さん、
    UA String ではなく別の方法で判断したほうがよいのでは、というアドバイスですね。

    もし何かヒントになりそうな方法があれば情報をいただければと思います。


    フォーラム オペレーター 星 睦美 - MSDN Community Support

    2014年3月5日 6:55
  • (mousedownの左クリックの値がIE8以前と他ブラウザで異なるため、

    事象発生中にjavascriptでmousedownのイベントを拾ったところ、左クリックで「1」が取得されました。
    (ドキュメントモードが8以前の戻り値。9以降では「0」が取れる想定です)

    なら、document.doumentMode では。

    ところで、0 or 1で判定すれば、調べる必要もなくなるのでは。ダメ、中ボタンの場合がある。

    2014年3月5日 12:57
  • hebikuzureさん

    feature detectionの参考資料を、どうもありがとうございます。
    環境やユーザで、変更や隠ぺいが可能なUAを見るより
    ブラウザの機能で判別する方法の方が優れていると思います。
    改修の際には、その形で対応すべきと考えています。


    ウィンドウズスクリプトプログラマさん

    IE11よりx-ua-compatibleも非推奨となりましたし
    document.uniqueIDでIEを切り分けるより、document.documentModeの方が柔軟性に富んでいて良いと思いました。
    ご助言、ありがとうございます。

    仰る通り、中ボタンの場合があるため
    既存のロジックは0、1を区別して判定しています。

    2014年3月7日 1:16
  • Yahoo!に問い合わせを行い、ツールバーの改修を行っていただきました。
    本日回答をいただき、現在では上記の事象が発生しないことを確認しましたので
    本件はクローズとさせていただきます。

    UAでの判断が根本的な問題を含んでいることは認識しております。
    その点についてご指摘、ご教授くださった方々にはお礼申し上げます。
    どうもありがとうございました。

    • 回答としてマーク mizk 2014年3月14日 0:48
    2014年3月14日 0:48