关于MSHTML

原创 2003年08月15日 08:20:00

本文翻译自http://msdn.microsoft.com/workshop/browser/mshtml/overview/overview.asp


MSDN Home >  MSDN Library >  Programming and Reusing the Browser >  Overviews/Tutorials

关于MSHTML

访问动态HTML(DHTML)对象模型的所有接口以IDispatch为基类,而且也是被用于脚本的对象模型的基础。因此对要操纵对象模型的任何人来说都很重要的是熟悉定义在动态的HTML介绍的概要和MSHTML包含的对象模型参考中的结构和功能。

MSHTML参考接口和脚本对象这一节说明了对象如何在DHTML对象模型里面映射到接口。举例来说,使用这一个映射,你可以看到IHTMLDocument2接口映射到文档对象。对接口的进一步的研究说明了如何通过get_put_方法访问对象的属性。对象的方法映射到可用的接口的方法,而且事件可以用标准的对OLE自动化连接点来捕获。

如何使对象模型接口的样例的演示在Colbtn、Driller和WalkAll示例中,这些示例在Colbtn示例源代码页面Driller示例源代码页面WalkAll示例源代码页面上。

  • 使用接口的建议
  • 获得文档接口
  • 使用文档接口
  • 相关的主题

使用接口的建议

通常,在文档中可以用脚本完成的任何事都可以通过使用接口操纵对象模型来完成。因此推荐在写使用对象模型接口的代码之前, 开发者应该在一个 HTML文档里面使用脚本设计功能原型。

下列HTML例子说明如何用脚本导航文档的all集合而且获得文档的每个元素的标签名字。等价的使用对象模型接口的Microsoft (R) Visual C++(R)的代码示例在Driller示例源代码页面WalkAll示例源代码页面上可以找到。

例子

<HTML>

<HEAD>

<TITLE>Page Title</TITLE>

</HEAD>

<SCRIPT LANGUAGE="JavaScript">

function Loaded()

{

    var c = document.all.length;

    var i;

    for(i = 0; i < c; i++)

    {

        spanTAGS.innerHTML = spanTAGS.innerHTML + document.all.item(i).tagName + "<BR>";

    }

}

</SCRIPT>

<BODY onload="Loaded()">

<SPAN id="spanTAGS"></SPAN>

</BODY>

</HTML>

获得文档接口

要开始使用对象模型接口,就要从文档获得IHTMLDocument2接口。一旦你有了这个接口,你就能存取文档中所有的元素。如何获得文档接口依赖于你的应用程序的实现。下列场合都需要以不同的方式获得文档接口。

  • 集成MSHTML时
  • 集成浏览器控件的一个实例时。
  • 从一个网页中包含的一个Microsoft ActiveX(R)控件。

集成MSHTML时获得文档接口

当集成一个MSHTML对象的时候,使用 CoCreateInstance创建HTML文档对象。 一旦创建了对象,你可以调用它的QueryInterface 方法,请求IID_IHTMLDocument2。WalkAll示例源代码页面的WalkAll示例说明了实现方法。

集成浏览器控件时获得文档接口

当集成浏览器控件的时候,执行下列步骤获得文档接口:

  1. 调用 IWebBrowser2::get_Document 获得文档的 IDispatch 接口。(译者注:MFC的CHtmlView的GetHtmlDocument方法,浏览器控件的Document属性或者DHtmlEdit控件的DOM属性也可以用于获取文档接口)
  2. 调用在前面步骤中获得的IDispatch指针的的QueryInterface,请求IID_IHTMLDocument2。

从ActiveX控件获得文档接口

ActiveX文档的存取动态HTML这一节解释了如何从ActiveX (R)控件获得文档接口。

使用文档接口

使用文档接口

一旦你获得了文档接口,你就可以使用任何一个IHTMLDocument2接口获得或修改文档的属性。这通常包括从文档包含的不同的元素中得到一些IHTMLElementCollection接口。

一个非常普遍的集合对象是all集合对象。all集合对象是通过使用IHTMLDocument2::all 方法获得的。 这个方法返回一个包含文档的所有元素的IHTMLElementCollection接口。然后你可以使用IHTMLElementCollection::item方法枚举元素。 IHTMLElementCollection::item方法为你提供一个可以用于调用QueryInterface,请求IID_IHTMLElement的IDispatch指针。这将会返回给你一个你能用来为个别的元素获得或设置信息的IHTMLElement接口指针。

大多数的元素提供一个接口操纵那个特定的元素。这些元素相关的接口名字具有IHTMLXXXXElement的格式,这里XXXX是元素的名字。要获得元素的对应接口,可以在IHTMLElement接口上调用QueryInterface,请求被需要的元素相关的接口。举例来说,img 元素提供一个IHTMLImgElement接口以可能用来明确地操纵img元素。如果要查看可用的元素相关的接口列表,可以查看接口和脚本对象的接口列表。

相关的主题

c#中用microsoft.mshtml遇到的一个问题

在项目中我引用.net的microsoft.mshtml的话,程序可以正常运行,但是由于项目要求所有引用的dll都是我们自己项目中文件夹而非系统的所以引用了一个项目自己的microsoft.mshtm...
  • xiao_rory
  • xiao_rory
  • 2010年09月02日 14:56
  • 3516

C# WebBrowser 编程 使用mshtml读取网页内容

首先需要引用Microsoft.mshtml,AxInterop.SHDocVw 一些方法: webBrowser.ScriptErrorsSuppressed = true;//允许脚本调试...
  • gold0523
  • gold0523
  • 2014年04月25日 15:38
  • 4951

关于引用mshtml的问题

今天看了个验证码识别的代码,其中引用到了mshtml.dll,找了半天原来就是microsoft.mshtml.dll。查这个dll的时候还发现了好几篇关于这个dll添加问题的文章。顺便看了下,原来这...
  • yysyangyangyangshan
  • yysyangyangyangshan
  • 2012年04月10日 19:12
  • 15078

使用MSHTML解析HTML页面

最近在写一个爬虫项目,本来打算用C/C++来实现,在网上查找有关资料的时候发现了微软的这个MSHTML库,最后发现在解析动态页面的时候它的表现实在是太差:在项目中需要像浏览器那样,执行JavaScri...
  • lanuage
  • lanuage
  • 2017年06月01日 02:20
  • 2529

解析html程序(C#版)——遍历各个节点(mshtml)

/* 在项目里引用了mshtml.dll,并且引用命名空间:using mshtml; 首先,参数html就是html文本内容(里面有markup标记和显示文本等等) 其次,getH...
  • hanjieson
  • hanjieson
  • 2013年02月07日 20:29
  • 8815

MSHTML最好用的HTML解析程序

  • 2013年04月25日 13:07
  • 7.65MB
  • 下载

使用MSHTML解析HTML页面

最近在写一个爬虫项目,本来打算用C/C++来实现,在网上查找有关资料的时候发现了微软的这个MSHTML库,最后发现在解析动态页面的时候它的表现实在是太差:在项目中需要像浏览器那样,执行JavaScri...
  • lanuage
  • lanuage
  • 2017年06月01日 02:20
  • 2529

CHtmlView中实时获取鼠标指针位置坐标

CHtmlView中 在前面的《CHtmlView 和 Webbrowser 控件中超链接点击事件的获取与检测》一文中演示了如何截获并响应超链接单击事件。用类似的方法还可以在 VC+...
  • brk1985
  • brk1985
  • 2014年07月03日 17:24
  • 738

mshtml在.net中的使用问题

今天在安装winform应用程序时,发现运行良好的程序在客户机上无法启动。调试了半天,发现原来是第三方程序中包含了对mshtml组件的调用,郁闷。      mshtml 在有的环境中被安装,而在有...
  • suleil1
  • suleil1
  • 2015年10月28日 16:47
  • 177

JavaScript后门深层分析

0x00 背景 之前@三好学生的文章JavaScript BackDoor中提到了利用rundll32.exe执行一段JavaScript代码即可反弹一个Http Shell,这里将之前看到的对...
  • qq_27446553
  • qq_27446553
  • 2016年01月13日 16:04
  • 616
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于MSHTML
举报原因:
原因补充:

(最多只允许输入30个字)