WEB开发网
开发学院软件开发VC 用VisualStudio2005生成浏览器帮助对象(BHO) 阅读

用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 对象模型。)

上一页  5 6 7 8 9 10 

Tags:VisualStudio 生成 浏览器

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接