none
IEの互換表示設定とX-UA-Compatibleでの設定によるXMLHttpRequestとXDomainRequestの違い RRS feed

  • 質問

  • IE11で互換表示設定に追加したサイトに、X-UA-CompatibleでIE10を指定した場合に

    jsでXDomainRequestの処理が正常に動いているように見えます。

    XDomainRequestはIE8とIE9でしか対応していないと認識しているのですが、

    互換表示設定を行うと、実際どのような状態(IE何?)で表示されているのでしょうか?

    また上記の設定の場合に、XDomainRequestの処理をXMLHttpRequestに置き換えても正常に動作するものなのでしょうか?

    宜しくお願いします。

    2017年8月23日 0:33

回答

  • > XDomainRequestはIE8とIE9でしか対応していない

    IE10 以降でも削除されたわけではないですね。

    参考:XDomainRequest – Restrictions, Limitations and Workarounds
    "IE11 deprecates the XDomainRequest object and it is not available in IE11 Edge mode."

    また IE10 互換モードであれば XMLHttpRequest で CORS するコードに置き換え可能と思います。


    hebikuzure



    2017年8月23日 0:51
    モデレータ
  • 利用できないのは IE11 の Edge モード(IE11 のネイティブ モード)だけで、IE11 でも互換モードでは動作するようですね。

    また Windows 10 の Microsoft Edge では利用できません。


    hebikuzure

    2017年8月23日 1:22
    モデレータ
  • すでに解決済みになってますが、せっかく調べたので書いておきます。

    > XDomainRequestはIE8とIE9でしか対応していないと認識しているのですが、

    検証したわけではなくググって調べただけですが、以下の記事によると XDomainRequest は IE8 - IE10 で利用できるそうです。

    XDR on Internet Explorer 11
    https://stackoverflow.com/questions/20525483/xdr-on-internet-explorer-11

    > 互換表示設定を行うと、実際どのような状態(IE何?)で表示されているのでしょうか?

    XDomainRequest を含めて IE10 の状態になると思われます。

    Windows 10 64-bit の IE11 で試してみましたが、以下のような meta タグを設定するとドキュメントモードが IE10 になって window.XDomainRequest で XDomainRequest オブジェクトは取得できます。

    <meta http-equiv="X-UA-Compatible" content="IE=10" />

    ただし、機能的に IE10 と完全に同じになるかまでは調べてないので分かりませんが。

    上記の記事からリンクが張ってある以下の MSDN ライブラリの「従来の API の追加、変更、および削除」のセクションに "XDomainRequest オブジェクトに代わって XMLHttpRequest の CORS が使われます" と書いてありましたが、完全に削除されたわけではないようです。

    IE11 の互換性の変更点
    https://msdn.microsoft.com/library/bg182625(v=vs.85).aspx#legacyAPIs

    なお、meta タグなし(ドキュメントモードは IE11)では  window.XDomainRequest は undefined になります。

    > また上記の設定の場合に、XDomainRequestの処理をXMLHttpRequestに置き換えても正常に動作するものなのでしょうか?

    どういう意味でしょう?

    Cross-Origin Resource Sharing (CORS) を利用したクロスドメインでの ajax 要求・処理を、IE11(またはドキュメントモードが IE10 の IE11)で、XMLHttpRequest を使って可能かということですか?

    そういうことであれば可能なはずです。(質問者さんの実装が不明で断定できないので「はず」という言い方になってますが、普通に使えば間違いなく可能です)

    実際以下の記事の例で試して確認しました。jQuery ajax は XMLHttpRequest を使っています。

    クロスドメインの WCF サービス
    http://surferonwww.info/BlogEngine/post/2016/12/27/wcf-service-in-cross-domain.aspx

    2017年8月23日 2:33

すべての返信

  • > XDomainRequestはIE8とIE9でしか対応していない

    IE10 以降でも削除されたわけではないですね。

    参考:XDomainRequest – Restrictions, Limitations and Workarounds
    "IE11 deprecates the XDomainRequest object and it is not available in IE11 Edge mode."

    また IE10 互換モードであれば XMLHttpRequest で CORS するコードに置き換え可能と思います。


    hebikuzure



    2017年8月23日 0:51
    モデレータ
  • 早速のご回答ありがとうございます。

    廃止されたのはEdge(IE=Edge)からだったんですね。

    ということは、IE10ではXMLHttpRequestを推奨されてはいるものの

    実質XDomainRequestとXMLHttpRequestどちらも使用可能ということなんですね。

    ありがとうございました。


    • 編集済み yuya-tnn 2017年8月23日 1:22
    2017年8月23日 1:18
  • 利用できないのは IE11 の Edge モード(IE11 のネイティブ モード)だけで、IE11 でも互換モードでは動作するようですね。

    また Windows 10 の Microsoft Edge では利用できません。


    hebikuzure

    2017年8月23日 1:22
    モデレータ
  • すみません、返信を修正したタイミングと被ってしまいました…

    ありがとうございます。

    2017年8月23日 1:32
  • すでに解決済みになってますが、せっかく調べたので書いておきます。

    > XDomainRequestはIE8とIE9でしか対応していないと認識しているのですが、

    検証したわけではなくググって調べただけですが、以下の記事によると XDomainRequest は IE8 - IE10 で利用できるそうです。

    XDR on Internet Explorer 11
    https://stackoverflow.com/questions/20525483/xdr-on-internet-explorer-11

    > 互換表示設定を行うと、実際どのような状態(IE何?)で表示されているのでしょうか?

    XDomainRequest を含めて IE10 の状態になると思われます。

    Windows 10 64-bit の IE11 で試してみましたが、以下のような meta タグを設定するとドキュメントモードが IE10 になって window.XDomainRequest で XDomainRequest オブジェクトは取得できます。

    <meta http-equiv="X-UA-Compatible" content="IE=10" />

    ただし、機能的に IE10 と完全に同じになるかまでは調べてないので分かりませんが。

    上記の記事からリンクが張ってある以下の MSDN ライブラリの「従来の API の追加、変更、および削除」のセクションに "XDomainRequest オブジェクトに代わって XMLHttpRequest の CORS が使われます" と書いてありましたが、完全に削除されたわけではないようです。

    IE11 の互換性の変更点
    https://msdn.microsoft.com/library/bg182625(v=vs.85).aspx#legacyAPIs

    なお、meta タグなし(ドキュメントモードは IE11)では  window.XDomainRequest は undefined になります。

    > また上記の設定の場合に、XDomainRequestの処理をXMLHttpRequestに置き換えても正常に動作するものなのでしょうか?

    どういう意味でしょう?

    Cross-Origin Resource Sharing (CORS) を利用したクロスドメインでの ajax 要求・処理を、IE11(またはドキュメントモードが IE10 の IE11)で、XMLHttpRequest を使って可能かということですか?

    そういうことであれば可能なはずです。(質問者さんの実装が不明で断定できないので「はず」という言い方になってますが、普通に使えば間違いなく可能です)

    実際以下の記事の例で試して確認しました。jQuery ajax は XMLHttpRequest を使っています。

    クロスドメインの WCF サービス
    http://surferonwww.info/BlogEngine/post/2016/12/27/wcf-service-in-cross-domain.aspx

    2017年8月23日 2:33
  • ご回答ありがとうございます。

    参考にさせて頂きます!

    すみません、どういうことがしたいかの背景の部分は省いて質問したのでわかりにくい質問になってました。
    元々は互換表示でIE8と指定(IE=8)しているサイトで、クロスドメインでの通信が行いたかったので(XMLHttpRequest Level2が使えなかった)
    調べた結果IE8とIE9ではXDomainRequestを使用しなければ出来ないとあり(調べた時点では8と9のみと思っていた)

    それを使用してのクロスドメイン通信を行っていたのですが
    色々とあって互換表示をIE8から脱却することになったのでIE11でIE=Edgeで指定すると
    XDomainRequestでエラーになったので、色々互換表示の指定を試してる中で出たのが最初の質問です。


    • 編集済み yuya-tnn 2017年8月23日 4:35
    2017年8月23日 4:33