スキップしてメイン コンテンツへ

 none
XMLHttpRequest - Office Web Addin RRS feed

  • 質問

  • Office Web Addin Excelを開発しています。

    XMLHttpRequestが失敗します。

    XMLHttpRequest.send()すると、

    XMLHttpRequeststatus = 0(失敗) で終了します。

    以下、コードの一部です。

    JavaScriptです。

    =========================

    var req = new XMLHttpRequest();

    req.addEventListener('loadend', function () {

        console.log("req.status >> " + req.status);
    };

    req.open("GET", url);

    req.send();

    =========================

    他のアプリ用のアドイン内では

    上記コードは

    問題なく動きました。

    =========================

    URLによってはうまくいきます。

    https://www3.nhk.or.jp >> 成功する, request.status = 200

    https://www.google.com >> 失敗する, request.status = 0

    なにか設定が足りていませんでしょうか?

    WebAddInManifestのAppDomainは関係ありますでしょうか?

    2019年5月6日 15:39

回答

  • 自己解決しました。

    下記サイトを参考にしました。
    https://docs.microsoft.com/ja-jp/office/dev/add-ins/develop/addressing-same-origin-policy-limitations

    サーバのレスポンスに
    下記のパラメータが必要でした。
    Access-Control-Allow-Origin: *

    自分の開発環境の問題でないため、
    サーバ管理側に依頼する必要がありました。

    • 回答としてマーク WadHercle 2019年5月29日 12:53
    2019年5月29日 12:53

すべての返信

  • URL によってうまく行く・行かないということからの想像ですが、サイトによって CORS 対応している・いないの違いがあるということでは?

    何にせよ、Fiddler などのキャプチャツールを使って要求・応答の中身を調べるとヒントが見つかると思いますので、やってみてください。 

    【追伸】

    ajax は基本的にクロスドメインでの要求には制約があると言う基本的なことはご存じですよね?

    • 編集済み SurferOnWww 2019年5月6日 20:59 追伸追加
    2019年5月6日 20:54
  • Fiddlerで調べました。

    ①Firefoxアドインからのリクエストと

    ②Office Web Addin Excel からのリクエストを比較しました。

    ①は成功、②は失敗します。

    =========================

    違うところはいろいろありますが、

    ①はHTTP1.1、②はHTTP 1.0で

    通信を行っていることがわかり、

    これが原因かも?と思っています。

    あるいはまったく別の原因かもしれません。

    =======================

    ここで、②の通信をhttp 1.1で行うようにするには

    どうすればいいでしょうか?

    XMLHTTPRequestに

    直接設定する方法があるか、

    あるいは何か別の設定を参照しているのか

    わかりません。

    2019年5月7日 4:29
  • 上のレスで書いた、

    (1) CORS 対応
    (2) クロスドメインの制約

    については調べてもらえたのでしょうか?


    2019年5月7日 5:49
  • 自己解決しました。

    下記サイトを参考にしました。
    https://docs.microsoft.com/ja-jp/office/dev/add-ins/develop/addressing-same-origin-policy-limitations

    サーバのレスポンスに
    下記のパラメータが必要でした。
    Access-Control-Allow-Origin: *

    自分の開発環境の問題でないため、
    サーバ管理側に依頼する必要がありました。

    • 回答としてマーク WadHercle 2019年5月29日 12:53
    2019年5月29日 12:53