积极答复者
刷新页面无法触发DocumentComplete事件

问题
-
开发环境:
VB6,IE9,WIN7
试验网址:
http://ess.10010.com
试验过程:
可以用BHO,也可以直接画个webbrowser
当Navigate到试验网址时,能够触发DocumentComplete.各项测试正常.
然后按F5刷新页面.此时不会触发DocumentComplete事件.有触发DownloadComplete,ProgressChange事件,并且ReadState值已为4(已完成).用httpWatch监控是有数据产生的.
重新调用Navigate方法打开此网站时,又可以触发DocumentComplete事件.
将试验网站换成其他的(如esales.10010.com),测试又完全正常.
提问:
1.DocumentComplete在什么情况下会被触发? 网上说只要ReadState=4就会触发,而上面的测试说明并不是这样.
2.为什么就这个网站刷新时不会触发DocumentComplete事件?难道是用了什么特殊技术?
答案
全部回复
-
我试过换到XP,IE6,问题依然存在.而且换一个网站就能得到正确的结果,并不是所有的页面都不能触发这个事件.所以我想不是换一个mshtml.dll能解决的,我电脑里现在有5个大小不同的这个文件,从3M到17M不等.没能解决触发DocumentComplete的问题,所以我现在使用DownloadComplete事件,并且枚举窗口所有框架,找到我需要处理的页面进行处理.
附上枚举页面的代码,希望能帮助到有需要的人.至于DocumentComplete的问题,待项目完成后再研究吧.
谢谢各位.
'枚举页面中所有的frame Private Sub EnumFrames(ByVal wb As SHDocVw.WebBrowser, wbs As Collection) On Error GoTo ErrorHandle Dim pContainer As olelib.IOleContainer Dim pEnumerator As olelib.IEnumUnknown Dim pUnk As olelib.IUnknown Dim pBrowser As SHDocVw.WebBrowser 'If Not (TypeOf wb Is olelib.IOleContainer) Then Exit Sub Set pContainer = wb.Document If pContainer.EnumObjects(OLECONTF_EMBEDDINGS, pEnumerator) = 0 Then Set pContainer = Nothing Do While pEnumerator.Next(1, pUnk) = 0 On Error Resume Next Err.Clear Set pBrowser = pUnk If Err.Number = 0 Then wbs.Add pBrowser Call EnumFrames(pBrowser, wbs) Else 'Debug.Print Err.Description End If Loop Set pEnumerator = Nothing End If Exit Sub ErrorHandle: End Sub
-
另外,在.NET的控件里面,有PreviewKeyDown事件,如果VB6的控件里面也有的话,可以在这里判断按键F5和Ctrol-R,如果是这两个键,则使用Navigate方法指向当前Webbrowser的URL。 但是我测试的时候,不知道为什么刷新两次才触发一次documentcomplete事件。。 仅作参考吧-
Think again!
- 已建议为答案 ThankfulHeartModerator 2012年10月17日 4:28