お世話になっております。
現在、承認済みのアカウントで
認可コードを取得するための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を開くという動作にしたところ、
取得することが出来た。そのコードを添付します。
【環境】
IE11
windows10
JSファイルでも試しましたが上手くいかなかったので、
そちらのソースも載せます。
JavaScript
1test(); 2 3function test() { 4 5 // 読み込み状態 6 var READYSTATE_UNINITIALIZED = 0; // 初期化中 7 var READYSTATE_LOADING = 1; // 表示データ読み込み中 8 var READYSTATE_LOADED = 2; // 表示データ読み込み完了 9 var READYSTATE_INTERACTIVE = 3; // データの表示中 10 var READYSTATE_COMPLETE = 4; // 全てのデータが表示終了 11 12 var ieAPP = new ActiveXObject( "InternetExplorer.Application" ); 13 ieAPP.Visible = true; 14 // ieAPP.Visible = false; 15 var url = WScript.Arguments(0); 16 var testurl = "microsoft-edge:"+url 17 18 //デバッグ用 19 // WScript.echo(url); 20 21 //Edgeで開く場合 22 var edge = WScript.CreateObject("Shell.Application"); 23 // edge.ShellExecute(testurl); 24 25 ieAPP.Navigate(url); 26 27 //読込が終わるまで待つ 28 while (ieAPP.Busy && ieAPP.ReadyState==READYSTATE_COMPLETE){WScript.Sleep(500)}; 29 30 var sh = WScript.CreateObject("Shell.Application"); 31 var array = []; 32 33 var pattern = 'testsuntech.tk/'; 34 35 for (var i = 0; i < sh.Windows().Count; i++) { 36 var a = ""; 37 try {a = sh.Windows(i).document.URL;} 38 catch(e) {} 39 if(a) {array.push(a);} 40 } 41 42 // WScript.echo(window.location.pathname); 43 44 var fileName = ""; 45 var filesh = new ActiveXObject("WScript.Shell"); 46 var desktopPath = filesh.SpecialFolders("Desktop"); 47 var absoluteFilePath = ""; 48 var create = true;//ファイルを作成するかのフラグ 49 50 var iomode = 1; 51 // 1: ファイルを読み取り専用として開く(書き込めない) 52 // 2: ファイルを書き込み専用として開く 53 // 8: ファイルの最後に追加して書き込み 54 55 var format = -2; 56 // true(-1): Unicode 57 // false(0): ASCII 58 // -2: SJIS(システムデフォルト) 59 60 var fs = new ActiveXObject("Scripting.FileSystemObject"); 61 62 //リダイレクトURLだけ抜き取る 63 for (var i = 0; i < array.length; i++) { 64 if(array[i].indexOf(pattern) > -1){ 65 // 部分一致のときの処理 66 var start = 0; 67 var end = 0; 68 var code = ""; 69 70 start = array[i].indexOf("code=") + 5; 71 end = array[i].indexOf("&",start) - 1; 72 73 if (end > 0) { 74 end = end - start + 1; 75 code = array[i].substr(start,end); 76 }else { 77 code = "notfind" 78 } 79 80 //デバッグ用 81 // WScript.echo(array[i]); 82 // WScript.echo(String(start)); 83 // WScript.echo(String(end)); 84 // WScript.echo(code); 85 86 fileName = "code_" + code; 87 88 // WScript.echo(fileName); 89 90 //windowオブジェクトが使えないため 91 // window.navigator.msSaveBlob(blob, "fileName.txt"); 92 93 absoluteFilePath = desktopPath + "\" + fileName; 94 95 var file = fs.OpenTextFile(absoluteFilePath,iomode,create,format); 96 97 //デバッグ用 98 WScript.echo(absoluteFilePath); 99 100 }else { 101 fileName = "Error" 102 absoluteFilePath = desktopPath + "\" + fileName; 103 104 var file = fs.OpenTextFile(absoluteFilePath,iomode,create,format); 105 } 106 107 file.Close(); 108 109 } 110 111 if (array.length == 0) { 112 fileName = "ReferenceError" 113 absoluteFilePath = desktopPath + "\" + fileName; 114 115 var file = fs.OpenTextFile(absoluteFilePath,iomode,create,format); 116 file.Close(); 117 } 118 119 // Internet Explorerを終了 120 // ieAPP.Quit(); 121 122} 123
実行できたバージョン
Javascript
1test(); 2 3function test() { 4 5 // 読み込み状態 6 var READYSTATE_UNINITIALIZED = 0; // 初期化中 7 var READYSTATE_LOADING = 1; // 表示データ読み込み中 8 var READYSTATE_LOADED = 2; // 表示データ読み込み完了 9 var READYSTATE_INTERACTIVE = 3; // データの表示中 10 var READYSTATE_COMPLETE = 4; // 全てのデータが表示終了 11 12 var ieAPP = new ActiveXObject( "InternetExplorer.Application" ); 13 ieAPP.Visible = true; 14 // ieAPP.Visible = false; 15 var url = WScript.Arguments(0); 16 var testurl = "microsoft-edge:"+url 17 18 //デバッグ用 19 //WScript.echo(url); 20 21 //Edgeで開く場合 22 var edge = WScript.CreateObject("Shell.Application"); 23 // edge.ShellExecute(testurl); 24 25 26 ieAPP.Navigate(" https://google.com"); 27 var startMsec = new Date(); 28 while (new Date() - startMsec < 5000); 29 30 ieAPP.Navigate(url); 31 32 //読込が終わるまで待つ 33 // while (ieAPP.Busy && ieAPP.ReadyState==READYSTATE_COMPLETE){WScript.Sleep(500)}; 34 while (ieAPP.Busy || ieAPP.ReadyState!=4){WScript.Sleep(500)}; 35 36 var sh = WScript.CreateObject("Shell.Application"); 37 var array = []; 38 39 // var pattern = 'testsuntech.tk/'; 40 var pattern = 'csuntec.co.jp/'; 41 42 for (var i = 0; i < sh.Windows().Count; i++) { 43 var a = ""; 44 try {a = sh.Windows(i).document.URL;} 45 catch(e) {} 46 if(a) {array.push(a);} 47 } 48 49 // WScript.echo(array[0]); 50 // WScript.echo(array[1]); 51 52 var fileName = ""; 53 var filesh = new ActiveXObject("WScript.Shell"); 54 var desktopPath = filesh.SpecialFolders("Desktop"); 55 var absoluteFilePath = ""; 56 var create = true;//ファイルを作成するかのフラグ 57 58 var iomode = 1; 59 // 1: ファイルを読み取り専用として開く(書き込めない) 60 // 2: ファイルを書き込み専用として開く 61 // 8: ファイルの最後に追加して書き込み 62 63 var format = -2; 64 // true(-1): Unicode 65 // false(0): ASCII 66 // -2: SJIS(システムデフォルト) 67 68 var fs = new ActiveXObject("Scripting.FileSystemObject"); 69 70 //デバッグ用 71 // WScript.echo(str(array.length)); 72 73 //リダイレクトURLだけ抜き取る 74 for (var i = 0; i < array.length; i++) { 75 if(array[i].indexOf(pattern) > -1){ 76 // 部分一致のときの処理 77 var start = 0; 78 var end = 0; 79 var code = ""; 80 81 start = array[i].indexOf("code=") + 5; 82 end = array[i].indexOf("&",start) - 1; 83 84 if (end > 0) { 85 end = end - start + 1; 86 code = array[i].substr(start,end); 87 }else { 88 code = "notfind" 89 } 90 91 //デバッグ用 92 WScript.echo(array[i]); 93 WScript.echo(String(start)); 94 WScript.echo(String(end)); 95 WScript.echo(code); 96 97 fileName = "code_" + code; 98 99 // WScript.echo(fileName); 100 101 //windowオブジェクトが使えないため 102 // window.navigator.msSaveBlob(blob, "fileName.txt"); 103 104 absoluteFilePath = desktopPath + "\" + fileName; 105 106 var file = fs.OpenTextFile(absoluteFilePath,iomode,create,format); 107 108 //デバッグ用 109 WScript.echo(absoluteFilePath); 110 111 }else { 112 fileName = "Error" 113 absoluteFilePath = desktopPath + "\" + fileName; 114 115 var file = fs.OpenTextFile(absoluteFilePath,iomode,create,format); 116 } 117 118 file.Close(); 119 120 } 121 122 if (array.length == 0) { 123 fileName = "ReferenceError" 124 absoluteFilePath = desktopPath + "\" + fileName; 125 126 var file = fs.OpenTextFile(absoluteFilePath,iomode,create,format); 127 file.Close(); 128 } 129 130 // Internet Explorerを終了 131 // ieAPP.Quit(); 132 133}
回答2件
あなたの回答
tips
プレビュー