|
UWSCでXMLHttpRequestを使うにはどのようにしたらいいですか!? ブラウザ(IE)上でconsole.log(window.XMLHttpRequest);を実行するとtrueになるのですが、以下のようにすると例外エラーが発生します。 IE = CreateOleObj("InternetExplorer.Application") Print IE.XMLHttpRequest WSHやUWSCではXMLHttpRequestを使用できないのでしょうか? 分かりにくい質問ですがご教授よろしくお願いいたします。
|
No.291 2014/10/21(Tue) 09:01:04
|
☆ Re: UWSCでXMLHttpRequestを使うには? / なま |
|
|
IEオブジェクトは厳密にはWindowオブジェクトとは別物のはずなので…… IE上でなくても良いなら、下記のような方法があります。 XMLHttpRequest= CreateOleObj("MSXML2.XMLHTTP") 「MSXML2.XMLHTTP」の部分は「MSXML2.XMLHTTP.6.0」のようにバージョン指定が可能です。
//自分の場合はWinHttpRequestを使いますが……
|
No.292 2014/10/21(Tue) 10:33:42
|
|
☆ Re: UWSCでXMLHttpRequestを使うには? / stuncloud |
|
|
IEの中で使いたいという話でしたら… ------------------------------------------------ textblock js var uri = 'http://foo.bar/'; var req = new XMLHttpRequest(); req.open('GET', uri, false); req.send(); alert(req.status); endtextblock
ie.Document.Script.execScript(js, "JavaScript") ------------------------------------------------ こんな感じで出来ました 肝心の部分はJavaScriptで書かなくてはいけませんが
|
No.293 2014/10/21(Tue) 14:50:26
|
|
☆ Re: UWSCでXMLHttpRequestを使うには? / なま |
|
|
一応、stuncloudさんに倣ってサンプルも書いときますね。
xhr = CreateOleObj("MSXML2.XMLHTTP") uri = "http://foo.bar/" xhr.open("GET", uri, false) xhr.send() print "HTTP STATUS=" + xhr.status
|
No.294 2014/10/21(Tue) 16:23:13
|
|
☆ Re: UWSCでXMLHttpRequestを使うには? / むっちー |
|
|
なまさん回答ありがとうございます。 MSXML2.XMLHTTPやWinHttpRequestを使おうと思ったのですがHTMLを直接パースできずDOMParserなどを使わないといけないと感じました。また、MSXML2.XMLHTTPだとOSに依存してしまうような気がしました。しかし、MSXML2.XMLHTTPやWinHttpRequestを使えばブラウザを開かずに操作できるのですごくメリットはあるのですが今の自分には使いこなせそうにありません。なまさんのようにすばらしいプログラムを作れるように頑張ります。サンプルまで作っていただいて本当にありがとうございます。 stuncloudさん回答ありがとうございます。 上記のようにすればブラウザ上でJavaScriptを動かすことができるのですね。上記を参考にして自分なりにスクリプト(以下)を作ってみました。まだまだ初心者なので知識を増やしてstuncloudさんのようなすばらしいプログラムが書けるようにがんばります。サンプルまで作っていただいて本当にありがとうございます。 ------------------------------------------------ textblock js function xhrStart(method,url,data,requestHeader,callback){ var xhr = new XMLHttpRequest(); xhr.onload = function(){ callback(xhr.response); } xhr.open(method,url); if(requestHeader !== null) for(key in requestHeader) xhr.setRequestHeader(key,requestHeader[key]); xhr.responseType = "document"; xhr.send(data); }
var callback1 = function(){ //処理 } xhrStart(method,'http://foo.bar/',null,null,callback1); endtextblock
ie.Document.Script.execScript(js, "JavaScript") ------------------------------------------------
|
No.295 2014/10/21(Tue) 17:01:22
|
|
☆ Re: UWSCでXMLHttpRequestを使うには? / むっちー |
|
|
すいません。少し間違えていたので修正しました。 ------------------------------------------------ textblock js function xhrStart(method,url,data,requestHeader,callback){ var xhr = new XMLHttpRequest(); xhr.onload = function(){ callback(xhr.response); } xhr.open(method,url); if(requestHeader !== null) for(key in requestHeader) xhr.setRequestHeader(key,requestHeader[key]); xhr.responseType = "document"; xhr.send(data); }
var callback1 = function(document){ var title = document.getElementsByTagName('title')[0].innerHTML; console.log(title); } xhrStart('GET','http://foo.bar/',null,null,callback1); endtextblock
ie.Document.Script.execScript(js, "JavaScript") ------------------------------------------------
|
No.296 2014/10/21(Tue) 17:23:41
|
|
☆ Re: UWSCでXMLHttpRequestを使うには? / なま |
|
|
参考までに、自分がいつも使うスクリプトの雛形を晒してみます。 元ネタはVBscriptで実装してましたね、確か。 //---- Http = CreateOleObj("WinHttp.WinHttpRequest.5.1") reqURL = "http://www3.rocketbbs.com/13/bbs.cgi?id=umiumi" Http.Open("GET",reqURL,False) Http.Send()
Stream = CreateOleObj("ADODB.Stream") Stream.Open Stream.Type = 1 //バイナリ指定 Stream.Write(Http.ResponseBody) //HTTP Requestのレスポンスを書き込む。 Stream.Position = 0 //ストリームの現在地を先頭へ戻す。 Stream.Type = 2 //テキスト指定 Stream.Charset = "_autodetect" //文字コード指定。あらかじめ判ってれば"utf-8"のように指定すると良し。 HtmlText = Stream.ReadText() //テキスト書き出し Stream.Close print HtmlText //HTMLソースが出力されます。
Htmlfile = CreateOleObj("htmlfile") Htmlfile.close() //初回なので不要だが、一応クローズして初期化。 Htmlfile.write(HtmlText) //htmlfileオブジェクトにソースを書き込み。 //htmlfileオブジェクトはHTMLdocumentオブジェクトと等価と考えて良さそうです。
//こんな感じでDOMアクセス可能です。 print Htmlfile.getElementsByTagName("HTML").item[0].outerHTML //----
htmlfileに突っ込む欠点はHTML5非対応ってあたりですねー HTMLではなく、XMLをパースしたいのであれば、MSXML2.DOMDocumentとか使うのが良いんじゃないかと思います。 //自分は必要になったことがないので、適当なサンプル出せませんが……
|
No.297 2014/10/21(Tue) 19:05:09
|
|