关于 webbrowser的 DocumentComplete 事件

xiaohuangtao 2004-09-03 05:16:08
我发觉 webbrowser的DocumentComplete 的事件有一些问题.

我是这样写的:
Public Sub NavigateFile(strFile As String)
On Error Resume Next
Me.Hide
blnOk = False
Dim strstring As String

WebBrowser1.Navigate strFile
WebBrowser1.Refresh
DoEvents
Do
DoEvents
'超时

If blnOk Then
Exit Sub
End If
Loop
Unload Me
End Sub


Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
blnOk = True
End Sub

Private Sub WebBrowser1_NavigateComplete2(ByVal pDisp As Object, URL As Variant)
blnOk = True
End Sub

但是有时会发现,WebBrowser1_DocumentComplete/WebBrowser1_NavigateComplete2 根本不触发!!!!!

文件是必然存在的,单独放到一个窗体上,放个按钮,文件名一样,WebBrowser1_DocumentComplete/WebBrowser1_NavigateComplete2 是必然要触发的!!


一直没有搞懂是什么意思!!!
...全文
617 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaohuangtao 2004-09-06
  • 打赏
  • 举报
回复
为了 防止,不响应事件,所以 我又加了
Private Sub WebBrowser1_NavigateComplete2(ByVal pDisp As Object, URL As Variant)
blnOk = True
End Sub

仍然 偶尔会出现!
xiaohuangtao 2004-09-06
  • 打赏
  • 举报
回复
我将 WebBrowser1.Refresh 去掉,有时还是会出现该错误.

这种情况出现的几率一般很小,但是一旦出现,就是致命错误.

直接导致:Do
DoEvents
'超时

If blnOk Then
Exit Sub
End If
Loop


死循环,加上超时后,却导致
If blnOk Then
Exit Sub
End If

中的相应处理无法进行!!
真受不了!!
kmzs 2004-09-06
  • 打赏
  • 举报
回复
WebBrowser1_NavigateComplete2
刷新时不触发
starsoulxp 2004-09-06
  • 打赏
  • 举报
回复
你换太机子试试行吗?
xiaohuangtao 2004-09-06
  • 打赏
  • 举报
回复
starsoulxp(星魂.NET) :
您好

CHtmlView \ WebBrowser2 如何真正知道DocumentComplete

(下文针对CHtmlView,由于WebBrowser2与其类似不再累赘。)
虽然CHtmlView提供了下面虚函数来得到文档解析完毕的事件。

virtual void OnDocumentComplete(
LPCTSTR lpszURL
);
但这个事件在网页存在 frame 的时候不再那么有效了,因为一旦某个frame激发了OnDownloadBegin,那么就会激发OnDocumentComplete,结果你会发现你的一个网页激发了多个OnDocumentComplete,而你也不知道哪个OnDocumentComplete真正能告诉你网页处理完毕了。



解决办法有三个:

方法一: 通过CHtmlView::OnProgressChange获取结束事件。 不理会OnDocumentComplete,

在OnProgressChange中有两个参数:
virtual void OnProgressChange(
long nProgress,
long nProgressMax
);
当第一个参数nProgress为-1时表示网页处理完毕。

另外两种方法可以在微软的知识库获得:
http://support.microsoft.com/support/kb/articles/q180/3/66.asp
HOWTO: Determine When a Page Is Done Loading in WebBrowser Control
Q180366

对于其中的方法一有一点补充,在上文support的代码中其在通过调用GetControlUnknown()获得WebBrowser控件的IUnknown指针后调用Release将接口释放了。
这是千万不行的!这将导致你的WebBrowser控件无法清除,详细可以参见MSDN对CWnd::GetControlUnknown的介绍。



我的意思是,现在她根本是不响应 事件了,哪怕不是真正的!
xiaohuangtao 2004-09-06
  • 打赏
  • 举报
回复
兄弟:
http://blog.csdn.net/111222/archive/2002/04/22/7259.aspx
http://blog.csdn.net/TechnoFantasy/

均无法打开,说服务器错误!

jiang8360 2004-09-04
  • 打赏
  • 举报
回复
有呀!

我顶一下
pandengzhe 2004-09-04
  • 打赏
  • 举报
回复
http://blog.csdn.net/TechnoFantasy/
dongge2000 2004-09-04
  • 打赏
  • 举报
回复
没人顶吗?
starsoulxp 2004-09-03
  • 打赏
  • 举报
回复
参考:
http://blog.csdn.net/111222/archive/2002/04/22/7259.aspx

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧