用VisualStudio2005生成浏览器帮助对象(BHO)
2007-03-15 21:46:38 来源:WEB开发网核心提示: 操作 DOM以下 JavaScript 代码演示了 DOM 的基本操作,它通过将图像的样式对象的 display 属性设置为“none”在网页上隐藏图像,用VisualStudio2005生成浏览器帮助对象(BHO)(10),以下是引用片段:functionRemo
操作 DOM
以下 JavaScript 代码演示了 DOM 的基本操作。它通过将图像的样式对象的 display 属性设置为“none”在网页上隐藏图像。
以下是引用片段:
functionRemoveImages(doc)
{
varimages=doc.images;
if(images!=null)
{
for(vari=0;i<images.length;i++)
{
varimg=images.item(i);
img.style.display="none";
}
}
}
在最后这部分中,我们将说明如何以 C++ 实现这个基本逻辑。
HelloWorldBHO.h
首先打开 HelloWorldBHO.h 并将 mshtml.h 包含在内。该头文件定义了使用 DOM 时所需的接口。
#include // DOM 接口
接下来,定义专用成员方法以包含上述 JavaScript 的 C++ 实现。
private:
void RemoveImages(IHTMLDocument2 *pDocument);
HelloWorldBHO.cpp
现在,OnDocumentComplete 事件处理程序要完成两个新任务。首先,它将缓存处理后的 WebBrowser 指针与激发事件的对象进行比较;如果两者相等,则该事件用于顶层窗口,并且文档也完全加载。其次,它检索一个指向 document 对象的指针并将其传递给 RemoveImages。
以下是引用片段:
voidSTDMETHODCALLTYPECHelloWorldBHO::OnDocumentComplete(IDispatch*pDisp,VARIANT*pvarURL)
{
HRESULThr=S_OK;
//查询IWebBrowser2接口。
CComQIPtrspTempWebBrowser=pDisp;
//此事件是否与顶级浏览器相关联?
if(spTempWebBrowser&&m_spWebBrowser&&
m_spWebBrowser.IsEqualObject(spTempWebBrowser))
{
//从浏览器中获取当前文档对象……
CComPtrspDispDoc;
hr=m_spWebBrowser->get_Document(&spDispDoc);
if(SUCCEEDED(hr))
{
//……并查询HTML文档。
CComQIPtrspHTMLDoc=spDispDoc;
if(spHTMLDoc!=NULL)
{
//最后,删除这些图像。
RemoveImages(spHTMLDoc);
}
}
}
}
pDisp 中的 IDispatch 指针包含了已在其中加载文档的窗口或框架的 IWebBrowser2 接口。我们将该值存储在 CComQIPtr 类变量中,该变量将自动执行一个 QueryInterface。接下来,为确定该页面是否已完全加载,我们将该接口指针与顶层浏览器在 SetSite 中进行缓存处理的接口指针进行比较。本测试的结果是,我们仅从顶层浏览器框架的文档中删除了图像;未加载到顶层框架中的文档没有通过本测试。(有关详细信息,请参阅如何确定页面何时在 WebBrowser 控件中完成加载和如何获取 HTML 框架的 WebBrowser 对象模型。)
Tags:VisualStudio 生成 浏览器
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接