HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
0220
玄冬IEコンポーネントからのPOSTデータの取得方法3解決


玄冬

リンク

2016/2/20(Sat) 14:50:49|NO.74664

hspのウィンドウにIEコンポーネント上にHTML+CSSでフォームを作り、
HSPでフォーム情報を処理したいと思い、↓のように書いたのですが

axobj IE, "Shell.Explorer.2", 640, 480 IE->"Navigate" "about:blank" Document = IE("Document") Document -> "Open" Document -> "Write" "<html><head></head><body> <form name=\"form\" action=\"XYZ\" method=\"POST\"> <input type=\"text\" id=\"t1\"> <input name=\"\" type=\"submit\" value=\"OK\"></body</html> " Document -> "Close" comevent IE_event, IE, "{34A715A0-6587-11D0-924A-0020AFC7AC4D}", *sub_on_IE_event ; IE のイベント取得 stop *sub_on_IE_event dispID = comevdisp(IE_event) if dispID = 250 { comevarg URL , IE_event, 1, 0 comevarg POST, IE_event, 4, 2 if vartype(POST) = 7 : sarrayconv LIST, POST, 1 } return
sarrayconvのところでエラーが出ます。

methodをGETにすればurlから入手できるのは知っていますが、
データ量が大きくなりそうなので、POSTで取得したいです。

どうすればPOSTデータを取得できるでしょうか。
ご回答よろしくお願いいたします。。



この記事に返信する


inovia

リンク

2016/2/20(Sat) 21:24:12|NO.74673

こんな感じですかね?
sarrayconv後にループまわして、文字列を格納してるのはイケてないですが。


axobj IE, "Shell.Explorer.2", 640, 480 IE->"Navigate" "about:blank" Document = IE("Document") Document -> "Open" Document -> "Write" "<html><head></head><body> <form name=\"form\" action=\"XYZ\" method=\"POST\"> <input type=\"text\" name=\"t1\"> <input name=\"\" type=\"submit\" value=\"OK\"></body></html> " Document -> "Close" comevent IE_event, IE, "{34A715A0-6587-11D0-924A-0020AFC7AC4D}", *sub_on_IE_event ; IE のイベント取得 stop *sub_on_IE_event dispID = comevdisp(IE_event) if dispID = 250 { comevarg URL , IE_event, 1, 0 comevarg POST, IE_event, 4, 2 if vartype(POST) = 7 { // Variant型 // http://marupeke296.com/IKDADV_CPP_VARIANT.html dimtype pvPostData, 7, 1 dupptr pvPostData, POST("refptr"), 16, 7 dupptr pvPostData_pvarVal, varptr(pvPostData) + 8, 4, 4 dimtype ppvPostData, 7, 1 dupptr ppvPostData, pvPostData_pvarVal, 16, 7 sarrayconv psa, ppvPostData, 1 sdim strPostData, length(psa) + 1 repeat length(psa) if 0 == psa(cnt) : break poke strPostData, cnt, psa(cnt) loop dialog strPostData } } return



inovia

リンク

2016/2/20(Sat) 21:44:50|NO.74674

POSTからデータを取るのではなく、DOMからフォームのデータを取った方が楽な気がします。

axobj IE, "Shell.Explorer.2", 640, 480 IE->"Navigate" "about:blank" Document = IE("Document") Document -> "Open" Document -> "Write" "<html><head></head><body> <form name=\"form\" action=\"XYZ\" method=\"POST\"> <input type=\"text\" name=\"t1\"> <input name=\"\" type=\"submit\" value=\"OK\"></body></html> " Document -> "Close" comevent IE_event, IE, "{34A715A0-6587-11D0-924A-0020AFC7AC4D}", *sub_on_IE_event ; IE のイベント取得 stop *sub_on_IE_event dispID = comevdisp(IE_event) if dispID = 250 { comevarg URL , IE_event, 1, 0 comevarg POST, IE_event, 4, 2 // getElementByIdから探すとかいろいろありますが。。。 // ↓はJavaScirpt的に document.forms[0].t1.value な奴です forms = Document("forms") form = forms("item", 0) ; 今回フォームが1つしかないので決め打ち t1 = form("t1") dialog t1("value") delcom t1 delcom form delcom forms // あるいは // ↓はJavaScirpt的に document.form.t1.value な奴です /* form = Document("form") t1 = form("t1") dialog t1("value") delcom t1 delcom form */ } return



玄冬

リンク

2016/2/20(Sat) 22:15:51|NO.74675

>inovia様
回答ありがとうございます。助かりました。

質問を書き込んだ後、
POSTデータに頼らずDOM検索する方法は思いつき挑戦中でした。

C++はまったく専門外なのでvariant型のいじり方がわかりませんでしたが
取り出し型がわかって一安心です。

確かにこの方法ならDOM使った方が楽なような気もしますが…
regexpで一括してデータ持ってこれそうなPOST取り出しも一考の余地がありそうです。

おかげで何とかなりそうです。頑張ってみます。



ONION software Copyright 1997-2023(c) All rights reserved.