信息: 访问在从一个 ActiveX 控件中的对象模型

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 172763
本文已归档。它按“原样”提供,并且不再更新。
概要
当为 Internet 编写 ActiveX 控件时,它通常可能需要访问对象模型的 HTML 网页。对象模型允许对在 HTML 页中的各种元素的访问权限。

本文讨论从 Visual c + + 和 Visual Basic 访问对象模型,并介绍 Internet 资源管理器 (IE) 3.x 和 4.0。
更多信息

对象模型

可以分别在 ActiveX 软件开发工具包 (SDK) 和 Internet Explorer 3.x 和 4.0,Internet 客户端 SDK 中找到文档对象模型。对象模型进行了说明,如下所示:
   window      - location      - frames      - ...      - document         - links         - forms            - elements				
窗口对象是在此层次结构的顶层。窗口具有又有自己的一组属性的一个文档属性属性。请有关更多的详细信息,参阅适当的 SDK。

控件应为什么需要访问该对象模型?

一个控件可以访问 (以及在某些情况下修改) 嵌入在页的信息。这样做,该控件必须访问对象模型。 例如对于一个控件可以枚举所有页上的元素。在动态的 HTML 的情况下该控件可以访问页中的几乎任何 HTML 元素。

访问对象模型

对象模型是使用自动化和 COM 接口实现的。能够访问该对象模型的顶级控件一旦然后它可以向下钻取使用自动化或 COM 接口的对象模型。本文讨论了这两个步骤:
  1. 获取到对象模型的顶层。
  2. 向下钻取到对象模型。

获取上一层的对象模型 (视觉 C++)

使用 IWebBrowserApp (用于 Internet Explorer 3.x 和 4.x 版)

IWebBrowserApp 是由浏览器控件公开的接口。 如果使用 vtable 接口具有一个文档属性 (或 get_document 方法),允许访问活动文档的自动化对象的权限。如果文档是 HTML 文档自动化对象都有一个脚本的属性,让脚本对象模型的 $ 窗口对象。因此对于访问对象模型的控件必须完成下列:

  • 从其包含的 HTML 页中获取 IWebBrowserApp。
  • 获取文档属性的 IWebBrowserApp。
  • 获取文档的脚本属性。
这将为您置于顶层 (窗口对象) 对象模型中。 再进一步向下钻取使用自动化。

获取该 IWebBrowserApp

获取该 IWebBrowserApp 是一个包含两个步骤的过程:
  1. 要获取 IServiceProvider 使用 IOleClientSite 指针。在一个 ATL 控件,可以通过访问控件的该 m_spClientSite 成员获得该指针。一个 MFC 控件中可以通过调用 COleControl::GetClientSite() 获得该指针。控件有到其容器的 IOleClientSite 接口的访问。它可以使用该指针以 QI IServiceProvider:
    pClientSite->QueryInterface(IID_IServiceProvider,                          (void **)&pISP);						
  2. 使用该 IServiceProvider 获取 IWebBrowserApp。使用在 IServiceProvider 一个 QueryService 可以获取该 IWebBrowserApp 方式来完成:
          pISP->QueryService(SID_SWebBrowserApp, IID_IWebBrowserApp,                        (void **)&pIWebBrowserApp));						
此外,如果您是编程的 Internet 浏览器 4 或更高版本,您可以获得对此代码与容器的 IWebBrowser2 接口的指针:
   pISP->QueryService(IID_IWebBrowserApp, IID_IWebBrowser2,     (void **)&pIWebBrowser2));				
QueryService 是 QueryInterface 从不同的它并没有遵循标识规则在 com。因此,如果对象本身不实现 IWebBrowserApp,它可以委托给包含的对象和 QueryService 它的一个 IWebBrowserApp。

获取 IWebBrowserApp 的文档属性

IWebBrowserApp 是双重接口。它有一个文档属性和 get_Document 方法。任何可用于获取活动文档的 IDispatch。在您有了该 IDispatch 后可获得脚本属性。

获取文档的脚本属性

使用该 IDispatch 获得上面,获取使用自动化的脚本属性。这将使该脚本的对象模型或窗口对象中的顶层。

获取对象模型 (视觉 C++) 的最上一级

(Internet Explorer 4.0 仅限)

Internet 浏览器 4.0 使访问对象模型变得更加容易。这是一个单步的过程:
  1. 从该 IClientSite 获得该 IHTMLDocument2。

从 IOleClientSite 获取 IHTMLDocument2

每个控件都有 IClientSite 其容器的访问。为从客户端站点 IHTMLDocument2 QI 运算结果应给脚本对象模型。
   IOleContainer* pContainer = NULL;   IHTMLDocument2* pDoc = NULL;   pClientSite->GetContainer( &pContainer );   if ( pContainer != NULL )      pContainer->QueryInterface( &IID_IHTMLDocument2, &pDoc );				
检查上面的调用的返回值。如果控件未嵌入在一个 HTML 页中,或者该容器不是 Internet 浏览器 4.0 上面的调用将失败。

获取 IHTMLDocument2 给脚本对象模型中的文档对象。自动化接口或 vtable 接口,可以被用来向对象模型下钻取。

获取上一层的对象模型 (视觉基本)

在用户控件的父属性可用于访问自动化对象。从父属性在 Visual Basic 文档 Internet Explorer 中返回的对象的脚本属性返回 IOmWindow 对象。

在 Visual Basic 文档中给出的示例是,如下所示:
Parent.Script.get_document.bgColor = "Blue"				
的 Parent 属性获取对自动化对象。然后脚本属性使我们的脚本对象模型窗口对象。然后可以像任何其他自动化对象访问不同的属性和方法。

上面的行的代码应如下所示:
Parent.Script.document.bgColor = "Blue"				
即使是在 Internet Explorer 3.x 正确使用 get_document,它将不起作用在 Internet 浏览器 4.0。正确的方法是使用文档属性。Internet Explorer 3.x 和 4.0 中,此操作有效。

对象模型的向下钻取

对象模型的向下钻取非常简单,只需调用属性和使用自动化方法。对于 Internet Explorer 3.x 使用 $ 仅自动化。 对于 Internet 浏览器 4.0,可以使用 vtable 接口。有关详细信息,请参阅 Internet 客户端 SDK 中 driller 的示例。
IE vb

警告:本文已自动翻译

属性

文章 ID:172763 - 上次审阅时间:12/04/2015 17:39:40 - 修订版本: 1.0

Microsoft Internet Explorer 3.01, Microsoft Internet Explorer 3.02, Microsoft Internet Explorer 4.0 128-Bit Edition, Microsoft Internet Client Software Development Kit 4.01

  • kbnosurvey kbarchive kbmt kbfaq kbinfo KB172763 KbMtzh
反馈