本文翻译自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元素。假设要查看可用的元素相关的接口列表,能够查看接口和脚本对象的接口列表。


相关的主题


关于MSHTML的更多相关文章

  1. ActiveX(四) mshtml 命名空间 重要接口简介

    在上一篇随笔 ActiveX(三)ActiveX 调用 Js 中,我们已经可以获得js中window对象的强类型接口.即 mshtml.IHTMLWindow2 ,通过该接口.我们可以调用js函数.那 ...

  2. Strong name signature not valid for this assembly Microsoft.mshtml.dll

    Strong name signature not valid for this assembly Microsoft.mshtml.dll  http://social.msdn.microsoft ...

  3. 如何MSHTML命名空间解析HTML文件(MSHTML::IHTMLDocument2Ptr 提示错误)

    1.创建Win32或MFC工程. 2.在预编译或需要使用MSHTML命名空间的头文件中添加以下语句: #include <atlbase.h>    #include <Mshtml ...

  4. c#控制IE浏览器自动点击等事件WebBrowser,mshtml.IHTMLDocument2 .

    // c#控制IE浏览器自动点击等事件WebBrowser,mshtml.IHTMLDocument2 分类: c# 2013-02-06 15:18 3008人阅读 评论(0) 收藏 举报 可以实现 ...

  5. .NET Interop.SHDocVw和MSHTML引用如何操作

    Interop.SHDocVw:引用Com:Microsoft HTML Object Library 和 Microsoft Internet Controls MSHTML:引用-->COM ...

  6. 关于引用mshtml的问题

    今天看了个验证码识别的代码,其中引用到了mshtml.dll,找了半天原来就是microsoft.mshtml.dll.查这个dll的时候还发现了好几篇关于这个dll添加问题的文章.顺便看了下,原来这 ...

  7. WebBrowser控件的高级定制+mshtml

    --> blog:WebBrowser控件的高级定制---以下为三篇重要的参考文献,    第一篇可以禁用了js弹窗和声音    第二篇的引用文献禁用了IE弹窗,但是原文的说明很好    第3篇 ...

  8. 使用MSHTML解析HTML页面

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

  9. [EXP]Microsoft Windows MSHTML Engine - "Edit" Remote Code Execution

    # Exploit Title: Microsoft Windows (CVE-2019-0541) MSHTML Engine "Edit" Remote Code Execut ...

随机推荐

  1. img图片元素下多余空白解决方案

    在进行页面的DIV+CSS排版时,遇到IE6(当然有时Firefox下也会偶遇)浏览器中的图片元素img下出现多余空白的问题绝对是常见的对於 该问题的解决方法也是「见机行事」,根据原因的不同要用不同的 ...

  2. @CacheEvict(value = { "" })

    org.springframework.cache.annotation.CacheEvict

  3. memcache缓存命中深入理解转载

    http://www.iteye.com/topic/225692 memcache的方法有 add,set,replace,get,delete,getstats,increment,decreme ...

  4. TreeView控件之,后台构建TreeView(WinForm小程序)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAX0AAAIdCAIAAABeBzrBAAAgAElEQVR4nOzdd5Qc130n+tl/nr3e5+

  5. UIGestureRecognizer手势

    常用手势: 滑动,轻点,捏合,旋转,拖拽,长按 1.滑动(快速滑动) let swipeUp = UISwipeGestureRecognizer(target: self, action: Sele ...

  6. 25 读取jar包内log4j.properties文件方法

    //读取log4j日志配置文件 InputStream inputStream=ApplicationExecutor.class.getResourceAsStream("/log4j_h ...

  7. UEFI模式下安装Win 7系统

    转载自:http://huayi898.blog.163.com/blog/static/2581351620144442319155/ 下载win7_64bit原版官方系统 1.用软碟通制作U盘启动 ...

  8. C/C++中的&&和||运算符

    代码: #include <iostream> #include <cstdio> using namespace std; int main(){ ,b=,c=-,d=; d ...

  9. 使用 phpMyAdmin无法登录mysql的问题

    今天使用使用phpmyadmin时出现了以下错误: (1)第一次时: 当配置文件config.inc.php里的配置项是: $cfg['Servers'][$i]['host'] = 'localho ...

  10. 【结构型】Decorate模式

    装饰模式主要意图是为对象扩展额外的职责,但对于用户来说,在使用行为上并没有任何的变化.在此举一个例子来解释该模式的含义.假如你手上有一张照片,此时可以给它盖上一片玻璃片,同时再套上一个精美的相框.如此 ...