質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.61%

ブラウザIEの仕様について

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,082

XXXX-XXXX

score 12

お世話になっております。

現在、承認済みのアカウントで
認可コードを取得するためのURLを外部アプリから開き、
IEで開かれたブラウザのURLに認可コードが表示されるので
そのコードでAPIを利用するプログラムを書いています。

この際に、chromeやEdgeなら問題なく認可コードが表示されるURLが返却されるのですが、
IEだと表示されません。(直接ブラウザを立ち上げて同じURLを貼り付けて開くと問題なく表示されます。)
また、chromeやedgeの場合でも直接ブラウザを立ち上げて貼り付けでもちゃんと表示されます。

下記の画像がその時のものです。
イメージ説明
本来であれば、URLの部分が
「{redirect_uri}?code={~}&location=us&accounts-server=https%3A%2F%2Faccounts.zoho.com」
となり、codeに認可コードが表示されます。

画像の通り、ZohoというサイトのもののAPIを利用としています。

もし、分かる方がいましたら教えていただけないでしょうか。
Zohoのサポートサービスにも念のため、問い合わせをしております。
【Zohoからの回答(必要部分だけをまとめたもの)】
ブラウザIEでまずGoogleを開き、
その後に対象URLを開くという動作にしたところ、
取得することが出来た。そのコードを添付します。

IE プロキシ設定

【環境】
IE11
windows10

JSファイルでも試しましたが上手くいかなかったので、
そちらのソースも載せます。

test();

function test() {

      //  読み込み状態
    var READYSTATE_UNINITIALIZED  = 0;  // 初期化中
    var READYSTATE_LOADING        = 1;  // 表示データ読み込み中
    var READYSTATE_LOADED         = 2;  // 表示データ読み込み完了
    var READYSTATE_INTERACTIVE    = 3;  // データの表示中
    var READYSTATE_COMPLETE       = 4;  // 全てのデータが表示終了

    var ieAPP = new ActiveXObject( "InternetExplorer.Application" );
    ieAPP.Visible = true;
    // ieAPP.Visible = false;
    var url = WScript.Arguments(0);
    var testurl = "microsoft-edge:"+url

    //デバッグ用
    // WScript.echo(url);

    //Edgeで開く場合
    var edge = WScript.CreateObject("Shell.Application");
    // edge.ShellExecute(testurl);

    ieAPP.Navigate(url);

    //読込が終わるまで待つ
    while (ieAPP.Busy && ieAPP.ReadyState==READYSTATE_COMPLETE){WScript.Sleep(500)};

    var sh = WScript.CreateObject("Shell.Application");
    var array = [];

    var pattern = 'testsuntech.tk/';

    for (var i = 0; i < sh.Windows().Count; i++) {
        var a = "";
        try {a = sh.Windows(i).document.URL;}
            catch(e) {}
            if(a) {array.push(a);}
    }

    // WScript.echo(window.location.pathname);

    var fileName = "";
    var filesh = new ActiveXObject("WScript.Shell");
    var desktopPath = filesh.SpecialFolders("Desktop");
    var absoluteFilePath = "";
    var create = true;//ファイルを作成するかのフラグ

    var iomode = 1;
    // 1: ファイルを読み取り専用として開く(書き込めない)
    // 2: ファイルを書き込み専用として開く
    // 8: ファイルの最後に追加して書き込み

    var format = -2;
    // true(-1): Unicode
    // false(0): ASCII
    // -2: SJIS(システムデフォルト)

    var fs = new ActiveXObject("Scripting.FileSystemObject");

    //リダイレクトURLだけ抜き取る
    for (var i = 0; i < array.length; i++) {
      if(array[i].indexOf(pattern) > -1){
        // 部分一致のときの処理
        var start = 0;
        var end = 0;
        var code = "";

        start = array[i].indexOf("code=") + 5;
        end = array[i].indexOf("&",start) - 1;

        if (end > 0) {
          end = end - start + 1;
          code = array[i].substr(start,end);
        }else {
          code = "notfind"
        }

        //デバッグ用
        // WScript.echo(array[i]);
        // WScript.echo(String(start));
        // WScript.echo(String(end));
        // WScript.echo(code);

        fileName = "code_" + code;

        // WScript.echo(fileName);

        //windowオブジェクトが使えないため
        // window.navigator.msSaveBlob(blob, "fileName.txt");

        absoluteFilePath = desktopPath + "\\" + fileName;

        var file = fs.OpenTextFile(absoluteFilePath,iomode,create,format);

        //デバッグ用
        WScript.echo(absoluteFilePath);

      }else {
        fileName = "Error"
        absoluteFilePath = desktopPath + "\\" + fileName;

        var file = fs.OpenTextFile(absoluteFilePath,iomode,create,format);
      }

      file.Close();

    }

    if (array.length == 0) {
      fileName = "ReferenceError"
      absoluteFilePath = desktopPath + "\\" + fileName;

      var file = fs.OpenTextFile(absoluteFilePath,iomode,create,format);
      file.Close();
    }

    //  Internet Explorerを終了
    // ieAPP.Quit();

}

実行できたバージョン

test();

function test() {

      //  読み込み状態
    var READYSTATE_UNINITIALIZED  = 0;  // 初期化中
    var READYSTATE_LOADING        = 1;  // 表示データ読み込み中
    var READYSTATE_LOADED         = 2;  // 表示データ読み込み完了
    var READYSTATE_INTERACTIVE    = 3;  // データの表示中
    var READYSTATE_COMPLETE       = 4;  // 全てのデータが表示終了

    var ieAPP = new ActiveXObject( "InternetExplorer.Application" );
    ieAPP.Visible = true;
    // ieAPP.Visible = false;
    var url = WScript.Arguments(0);
    var testurl = "microsoft-edge:"+url

    //デバッグ用
   //WScript.echo(url);

    //Edgeで開く場合
    var edge = WScript.CreateObject("Shell.Application");
    // edge.ShellExecute(testurl);


    ieAPP.Navigate(" https://google.com");
    var startMsec = new Date();
    while (new Date() - startMsec < 5000);

    ieAPP.Navigate(url);

    //読込が終わるまで待つ
    // while (ieAPP.Busy && ieAPP.ReadyState==READYSTATE_COMPLETE){WScript.Sleep(500)};
    while (ieAPP.Busy || ieAPP.ReadyState!=4){WScript.Sleep(500)};

    var sh = WScript.CreateObject("Shell.Application");
    var array = [];

    // var pattern = 'testsuntech.tk/';
    var pattern = 'csuntec.co.jp/';

    for (var i = 0; i < sh.Windows().Count; i++) {
     var a = "";
        try {a = sh.Windows(i).document.URL;}
    catch(e) {}
    if(a) {array.push(a);}
    }

    // WScript.echo(array[0]);
    // WScript.echo(array[1]);

    var fileName = "";
    var filesh = new ActiveXObject("WScript.Shell");
    var desktopPath = filesh.SpecialFolders("Desktop");
    var absoluteFilePath = "";
    var create = true;//ファイルを作成するかのフラグ

    var iomode = 1;
    // 1: ファイルを読み取り専用として開く(書き込めない)
    // 2: ファイルを書き込み専用として開く
    // 8: ファイルの最後に追加して書き込み

    var format = -2;
    // true(-1): Unicode
    // false(0): ASCII
    // -2: SJIS(システムデフォルト)

    var fs = new ActiveXObject("Scripting.FileSystemObject");

    //デバッグ用
    // WScript.echo(str(array.length));

    //リダイレクトURLだけ抜き取る
    for (var i = 0; i < array.length; i++) {
      if(array[i].indexOf(pattern) > -1){
        // 部分一致のときの処理
        var start = 0;
        var end = 0;
        var code = "";

        start = array[i].indexOf("code=") + 5;
        end = array[i].indexOf("&",start) - 1;

        if (end > 0) {
          end = end - start + 1;
          code = array[i].substr(start,end);
        }else {
          code = "notfind"
        }

        //デバッグ用
        WScript.echo(array[i]);
        WScript.echo(String(start));
        WScript.echo(String(end));
        WScript.echo(code);

        fileName = "code_" + code;

        // WScript.echo(fileName);

        //windowオブジェクトが使えないため
        // window.navigator.msSaveBlob(blob, "fileName.txt");

        absoluteFilePath = desktopPath + "\\" + fileName;

        var file = fs.OpenTextFile(absoluteFilePath,iomode,create,format);

        //デバッグ用
        WScript.echo(absoluteFilePath);

      }else {
        fileName = "Error"
        absoluteFilePath = desktopPath + "\\" + fileName;

        var file = fs.OpenTextFile(absoluteFilePath,iomode,create,format);
      }

      file.Close();

    }

    if (array.length == 0) {
      fileName = "ReferenceError"
      absoluteFilePath = desktopPath + "\\" + fileName;

      var file = fs.OpenTextFile(absoluteFilePath,iomode,create,format);
      file.Close();
    }

    //  Internet Explorerを終了
    // ieAPP.Quit();

}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • XXXX-XXXX

    2019/05/30 13:54

    ご丁寧にありがとうございます。

    確かにそもそも、IE自体に不具合がある可能性があるかもしれません。
    少し、進展がありましたので提示します。

    キャンセル

  • Lhankor_Mhy

    2019/05/30 17:33

    > その後に対象URLを開くという動作にしたところ、取得することが出来た。

    これは、ご解決された、ということでいいのでしょうか?

    キャンセル

  • XXXX-XXXX

    2019/05/31 13:25

    そうですね。
    やりたいことは出来たけど、
    IEの仕様は不明のままというイメージですね

    キャンセル

回答 2

checkベストアンサー

0

IEの使用は不明のまま

まぁそうでしょう。
昔はIE率が高くて色々MSが実装しましたが他のブラウザのシェア増加により根本的に見直しが必要になりました。そこでEdgeが生まれました。まぁそれでも結局断念してChromiumベースになるって公式にリリースされましたけど...
って誰かから聞いた気がします。
IEは利便性の高いHPを作るのにもはや邪魔な存在です。それをサポート対象外にするのは当然の対処でしょう。
最後の公式リリースの話は確かです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/06/03 16:40

    回答ありがとうございます。

    そうだったのですね。
    ブラウザのを操作するに至っては基本的にはChromeやFoxなどをメインにしていった方がいいのですね。

    キャンセル

0

IEをサポート外にするのはだめなのでしょうか?
時間をかけてサポートする利点があるのかわかりませんが。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/29 16:42

    遅れてしまい申し訳ありません。
    IEはなるべく使いたくないので、
    chromeでの実装を考えているのですが、
    URLの取得方法が分からず、現在は仕方なくIEで行っています。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る