vb.net WebBrowser中的onchange问题

如果我写成
Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click
WebBrowser1.Document.Window.Frames(0).Document.GetElementById("me").SetAttribute("value", "7")
WebBrowser1.Document.Window.Frames(0).Document.GetElementById("me").RaiseEvent("onchange")

WebBrowser1.Document.Window.Frames(0).Document.GetElementById("you").SetAttribute("value", "6“)
WebBrowser1.Document.Window.Frames(0).Document.GetElementById("you").RaiseEvent("onchange")
End Sub
第二个好像被选中了一次然后又被还原了~就闪了一下又变成第一行内容了

但如果写成
Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click
WebBrowser1.Document.Window.Frames(0).Document.GetElementById("me").SetAttribute("value", "7")
WebBrowser1.Document.Window.Frames(0).Document.GetElementById("me").RaiseEvent("onchange")
End Sub

Private Sub Button9_Click(sender As Object, e As EventArgs) Handles Button9.Click
WebBrowser1.Document.Window.Frames(0).Document.GetElementById("you").SetAttribute("value", "6")
WebBrowser1.Document.Window.Frames(0).Document.GetElementById("you").RaiseEvent("onchange")
End Sub
变成两个按钮来操作,第二个选项就可以成功被选中,这是怎么回事?

第1个回答  2017-10-06
你这情况是因为原来的VB.NET中4行代码瞬间就执行完毕。第2行代码执行onchange,但onchange是在JS中执行的,这需要时间,而VB不管JS耗时,直接去执行后面的代码。
解决方式是在第2、3行之间插入一个空消耗时间的循环,等待JS完成,比较简单但落后。或者是监视网页处理情况,判断JS完成时,再执行后面代码。
第2个回答  推荐于2016-03-31
部分代码如下:
在窗口及WebBrowser创建完以后,写此代码:
WebBrowser.OnNewWindow2:=IE1NewWindow2;
给主窗口创建一个方法:
procedure TBrowForm.IE1NewWindow2(Sender: TObject; var ppDisp: IDispatch;var Cancel: WordBool);
Var NewForm:TBrowForm;
begin
try
NewForm :=TPopBrowerForm.Create(application);
NewForm.WebBrowser.OnNewWindow2 :=IE1NewWindow2;//如果在窗口的Oncreate事件
//有此代码,此处就可以省略
ppDisp := NewForm.WebBrowser.Application;
NewForm.Show;
Cancel:=false;
except
end;
end;追问

能否提供一些vb.net版呢?
这个看上去好像是弹窗的?

本回答被提问者和网友采纳
相似回答