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をクリックするようにしても同じエラーが出てしまいます。
どのようにすればうまくいくのかご教授お願いします。
onsubmit="return fnc001(this)"あたりがポイントでは?
JavaScript でfnc001()が記述されていると思いますが。
そのソースが記載されていませんね.
早速のレスサンクスです。以下がソースです。
よろしくお願いします。
<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>
function fnc001()を無視していきなりsubmitしていることに
お気づきですか。
onsubmitはformがsubmitするときに実行すると思ったので
VBからformをsubmitするか、submitのボタンをクリックすれば
実行されると考えたのですが。
VBからfunction fnc001()を実行する必要があるのでしょうか?
できればやり方を教えて欲しいのですが。
onsubmitはformがsubmitするときに実行すると思ったので
VBからformをsubmitするか、submitのボタンをクリックすれば
実行されると考えたのですが。
VBからfunction fnc001()を実行する必要があるのでしょうか?
できればやり方を教えて欲しいのですが。
すみません。
ブラウザが変になってしまって二重カキコしてしまいました
>VBからfunction fnc001()を実行する必要があるのでしょうか?
必要はありあせんが、FORM1が求めている入力項目は埋めてやる
必要があるんでは?
VBで必要な値なり文字なりを貼り付けた後でsubmitすれば?
JScriptを使ったフォームのsubmitはVBからは出来ません。
お一人以外のレスがつかないのもそのためです。
具体的なやり方も示しませんし。
もしやりたいのならフォームの形式を変えるなりするしかないでしょう。
ちょっと見かねたのでレスしておきます。
ご参考までに・・・。
http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200503/05030070.txt
お二方レスありがとうございます。
いっちょかみさんのリンク先を読みやってみまたら、
JavaScriptの実行はうまくいきました。
それと入力項目に関しては必要な個所は全て埋めてます。
ただ、
WebBrowser1.Navigate2 "JavaScript:XXXXXXXX()"
とするとJavaScriptの結果のtrueがWebBrowser1に
表示されるだけで、formをsubmitするわけではありません。
やはりなな氏さんのおっしゃるとおりにformのsubmit時に
JavaScriptの実行は無理なのでしょうか?
> onsubmitはformがsubmitするときに実行すると思ったので
私もそう思います。
> WebBrowser1.Navigate2 "JavaScript:XXXXXXXX()"
これ、fnc001 の事だとしたら、括弧内に FORM1 を示す式を渡す必要があるのでは。
> とするとJavaScriptの結果のtrueがWebBrowser1に
値が返されると困るなら、値を返さないようなメソッドを直後に実行させておくとか。
"JavaScript:XXXXXXXX();document.body.click();"
> アクセスが拒否されました
このメッセージが出る要因は幾つかあって。
別ドメインへのアクセスが発生して拒否されている場合とか、以前表示していたページ上の要素(アンロード済みのオブジェクト)を操作しようとしてエラーになっている場合とか、アンチウィルスソフトやポップアップブロッカによって停止させられている場合とか。。。
>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を利用すれば必要な箇所だけ書換えることも可能かと思われます。
未熟者ゆえ間違っているかもわかりませんが、うそはないと思います。
お役に立てなく申し訳ございませんでした。がんばってください。
ツイート | ![]() |