vb6+webbrowserでformを自動でsubmitするには?


64King  2005-11-04 07:15:08  No: 127291

5日ほど前に別の掲示板で質問したのですが、回答が得られなかったので
こちらで質問させていただきます。

vb6+webbrowserでformを自動でsubmitするようなものを 
作っているのですが、どうもうまくいきません。 
いろいろ調べて 

Dim AForms As Variant 
For Each AForms In WebBrowser1.Document.Forms 
  If AForms.Name = "FORM1" Then 
    AForms.submit 
    Exit Sub 
  End If 
Next 

というように処理をしてうまくいくページもありますが、 
  アクセスが拒否されました 
とエラーになってしまうページがあります。 
エラーになるページのform部分は 

<form action="/xxx" method="GET" name="FORM1" target="_top" onsubmit="return fnc001(this)"> 
<input type="hidden" name="aa" value="aaa"> 
<input type="hidden" name="bb" value="bbb"> 
<input type="text" name="cc" size="46" value=" maxlength="256"> 
<input type="submit" value="開始">  
</form> 

というふうになっています。 

直接submitをクリックするようにしても同じエラーが出てしまいます。 
どのようにすればうまくいくのかご教授お願いします。


いっちょかみ  2005-11-04 07:47:58  No: 127292

onsubmit="return fnc001(this)"あたりがポイントでは?
JavaScript でfnc001()が記述されていると思いますが。
そのソースが記載されていませんね.


64King  2005-11-04 08:33:24  No: 127293

早速のレスサンクスです。以下がソースです。
よろしくお願いします。

<script type="text/javascript">
function fnc001(obj) {
var a_svx, ix, iy;
a_svx = new Array();
a_svx[0] = new Array();
a_svx[1] = new Array();
a_svx[2] = new Array();
if (obj.name == "FORM1") { 
a_svx[0][0] = 101931;
a_svx[0][1] = 101932;
a_svx[1][0] = 101933;
a_svx[1][1] = 101934;
a_svx[2][0] = 101935;
a_svx[2][1] = 101936;
} else {                          
a_svx[0][0] = 101937;
a_svx[0][1] = 101938;
a_svx[1][0] = 101939;
a_svx[1][1] = 101940;
a_svx[2][0] = 101941;
a_svx[2][1] = 101942;
}
ix = null;
if (obj.lg != null) {
if (obj.lg.value == "ja") {
ix = 1;
} else if (obj.lg.value == "en") {
ix = 2;
} else {
ix = 0;
}
}
iy = null;
if (obj.wd != null) {
if (obj.wd.value == "0") {
iy = 0;
} else if (obj.wd.value == "1") {
iy = 1;
}
}
if (ix != null && iy != null) {
obj.svx.value = a_svx[ix][iy];
}
return true;
}
</script>


いっちょかみ  2005-11-04 08:46:45  No: 127294

function fnc001()を無視していきなりsubmitしていることに
お気づきですか。


64King  2005-11-04 09:49:58  No: 127295

onsubmitはformがsubmitするときに実行すると思ったので
VBからformをsubmitするか、submitのボタンをクリックすれば
実行されると考えたのですが。
VBからfunction fnc001()を実行する必要があるのでしょうか?
できればやり方を教えて欲しいのですが。


64King  2005-11-04 09:50:50  No: 127296

onsubmitはformがsubmitするときに実行すると思ったので
VBからformをsubmitするか、submitのボタンをクリックすれば
実行されると考えたのですが。
VBからfunction fnc001()を実行する必要があるのでしょうか?
できればやり方を教えて欲しいのですが。


64King  2005-11-04 09:52:05  No: 127297

すみません。
ブラウザが変になってしまって二重カキコしてしまいました


いっちょかみ  2005-11-04 18:48:21  No: 127298

>VBからfunction fnc001()を実行する必要があるのでしょうか?

必要はありあせんが、FORM1が求めている入力項目は埋めてやる
必要があるんでは?
VBで必要な値なり文字なりを貼り付けた後でsubmitすれば?


なな氏  2005-11-05 01:18:55  No: 127299

JScriptを使ったフォームのsubmitはVBからは出来ません。
お一人以外のレスがつかないのもそのためです。
具体的なやり方も示しませんし。
もしやりたいのならフォームの形式を変えるなりするしかないでしょう。

ちょっと見かねたのでレスしておきます。


いっちょかみ  2005-11-05 03:25:14  No: 127300

ご参考までに・・・。
http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200503/05030070.txt


64King  2005-11-05 07:31:30  No: 127301

お二方レスありがとうございます。
いっちょかみさんのリンク先を読みやってみまたら、
JavaScriptの実行はうまくいきました。
それと入力項目に関しては必要な個所は全て埋めてます。
ただ、
  WebBrowser1.Navigate2 "JavaScript:XXXXXXXX()"
とするとJavaScriptの結果のtrueがWebBrowser1に
表示されるだけで、formをsubmitするわけではありません。
やはりなな氏さんのおっしゃるとおりにformのsubmit時に
JavaScriptの実行は無理なのでしょうか?


Dental  2005-11-05 08:08:32  No: 127302

> onsubmitはformがsubmitするときに実行すると思ったので
私もそう思います。

>  WebBrowser1.Navigate2 "JavaScript:XXXXXXXX()"
これ、fnc001 の事だとしたら、括弧内に FORM1 を示す式を渡す必要があるのでは。

> とするとJavaScriptの結果のtrueがWebBrowser1に
値が返されると困るなら、値を返さないようなメソッドを直後に実行させておくとか。
  "JavaScript:XXXXXXXX();document.body.click();"

> アクセスが拒否されました 
このメッセージが出る要因は幾つかあって。

別ドメインへのアクセスが発生して拒否されている場合とか、以前表示していたページ上の要素(アンロード済みのオブジェクト)を操作しようとしてエラーになっている場合とか、アンチウィルスソフトやポップアップブロッカによって停止させられている場合とか。。。


いっちょかみ  2005-11-06 04:57:08  No: 127303

>JScriptを使ったフォームのsubmitはVBからは出来ません。
なな氏さん勉強になりました。知りませんでした。
未熟ものが、回答してはいけまんせんね!でもあと1回だけ発言させてください。
後は、もう登場しません。

>もしやりたいのならフォームの形式を変えるなりするしかないでしょう。
自分で自由になるフォームなら簡単でしょうが・・・・。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200503/05030101.txt
をご参考になさってください。
LESIAさんのレスで
WebBrowser1.Document.body.innerhtml = strHTML
の前にstrHTML = "xxxxxxxxxxxxx 都合の良いフォームの形式 xxxxxxxxxxxxx"  またouterhtmlを利用すれば必要な箇所だけ書換えることも可能かと思われます。
未熟者ゆえ間違っているかもわかりませんが、うそはないと思います。

お役に立てなく申し訳ございませんでした。がんばってください。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加