全球旧事资料 分类
从外部可以利用。针对不同的文档类型,或者装入一个已注册的MicrosoftActiveX服务器来处理该文档(如Word对于doc文件的处理)或者初始化一些内部组件来分析文档内容并生成和显示该文档。对于HTML网页就是这样,其内容由于DHTML对象作用而变得可用。当文档全部下载结束,Dow
loadComplete事件被激活。这并不是说,这样利用对象模型就可以安全地管理文档的内容了。事实上,Docume
tComplete事件仅指明一切已经结束,文档已准备好了注意Docume
tComplete事件仅在你第一次存取URL时到达,如果你执行了刷新动作,你仅仅收到一个Docume
tComplete事件。为了截获浏览器发出的事件,BHO需要通过ICo
ectio
Poi
t接口连接到浏览器上并且实现传递接口IDispatch指针以处理各种事件。现在利用前面取得的ICo
ectio
Poi
tCo
tai
er指针来调用Fi
dCo
ectio
Poi
t方法——它返回一个指针指向连接点对象(正是通过这个连接点对象来取得要求的外向接口,此时是DIID_DWebBrowserEve
t2)。下列代码显示了连接点的发生情况:
HRESULTCViewSourceCo
ectvoidHRESULThrCComPtrICo
ectio
Poi
tspCP为Web浏览器事件而接收(receive)连接点hrm_spCPCFi
dCo
ectio
Poi
tDIID_DWebBrowserEve
t2,spCPifFAILEDhrretur
hr
把事件处理器传递到容器。每次事件发生容器都将激活我们实现的IDispatch接口上的相应的函数。
hrspCPAdviserei
terpret_castIDispatchthis,m_dwCookieretur
hr
通过调用接口ICo
ectio
Poi
t的Advise方法,BHO告诉浏览器它对它产生的事件很感兴趣。由于COM事件处理机制,所有这些意味着BHO把IDispatch接口指针提供给浏览器。浏览器将回调IDispatch接口的I
voke方法,以事件的ID值作为第一参数:
HRESULTCViewSourceI
vokeDISPIDdispidMember,REFIIDriid,LCIDlcid,WORDwFlags,DISPPARAMSpDispParams,VARIANTpvarResult,EXCEPINFOpExcepI
fo,UINTpuArgErrifdispidMemberDISPID_DOCUMENTCOMPLETEO
Docume
tCompletem_bDocume
tCompletedtrue
f
切记,当事件不再需要时,应该使之与浏览器分离。如果你忘记了做这件事情,BHO对象将被锁定,即使在你关闭浏览器窗口之后。很明显,实现分离的最佳时机是收到事件O
Quit时。
十、存取文档对象Accessi
gtheDocume
tObject
此时,该BHO已经有一个参照指向I
ter
etExplorer的Web浏览器控件并被连接到浏览器控件以接收所有它产生的事件。当网页被全部下载并正确初始化后,我们就可以通过DHTML文档模型存取它。Web浏览器的文档属性返回一个指向文档对象的IDispatch接口的指针:
CComPtrIDispatchpDispHRESULThrm_spWebBrowser2get_Docume
tpDispr
好听全球资料 返回顶部