关于MSHTML
本文翻译自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演示样例说明了实现方法。
集成浏览器控件时获得文档接口
当集成浏览器控件的时候,运行下列步骤获得文档接口:
- 调用 IWebBrowser2::get_Document 获得文档的 IDispatch 接口。(译者注:MFC的CHtmlView的GetHtmlDocument方法,浏览器控件的Document属性或者DHtmlEdit控件的DOM属性也能够用于获取文档接口)
- 调用在前面步骤中获得的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的更多相关文章
- ActiveX(四) mshtml 命名空间 重要接口简介
在上一篇随笔 ActiveX(三)ActiveX 调用 Js 中,我们已经可以获得js中window对象的强类型接口.即 mshtml.IHTMLWindow2 ,通过该接口.我们可以调用js函数.那 ...
- 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 ...
- 如何MSHTML命名空间解析HTML文件(MSHTML::IHTMLDocument2Ptr 提示错误)
1.创建Win32或MFC工程. 2.在预编译或需要使用MSHTML命名空间的头文件中添加以下语句: #include <atlbase.h> #include <Mshtml ...
- c#控制IE浏览器自动点击等事件WebBrowser,mshtml.IHTMLDocument2 .
// c#控制IE浏览器自动点击等事件WebBrowser,mshtml.IHTMLDocument2 分类: c# 2013-02-06 15:18 3008人阅读 评论(0) 收藏 举报 可以实现 ...
- .NET Interop.SHDocVw和MSHTML引用如何操作
Interop.SHDocVw:引用Com:Microsoft HTML Object Library 和 Microsoft Internet Controls MSHTML:引用-->COM ...
- 关于引用mshtml的问题
今天看了个验证码识别的代码,其中引用到了mshtml.dll,找了半天原来就是microsoft.mshtml.dll.查这个dll的时候还发现了好几篇关于这个dll添加问题的文章.顺便看了下,原来这 ...
- WebBrowser控件的高级定制+mshtml
--> blog:WebBrowser控件的高级定制---以下为三篇重要的参考文献, 第一篇可以禁用了js弹窗和声音 第二篇的引用文献禁用了IE弹窗,但是原文的说明很好 第3篇 ...
- 使用MSHTML解析HTML页面
最近在写一个爬虫项目,本来打算用C/C++来实现,在网上查找有关资料的时候发现了微软的这个MSHTML库,最后发现在解析动态页面的时候它的表现实在是太差:在项目中需要像浏览器那样,执行JavaScri ...
- [EXP]Microsoft Windows MSHTML Engine - "Edit" Remote Code Execution
# Exploit Title: Microsoft Windows (CVE-2019-0541) MSHTML Engine "Edit" Remote Code Execut ...
随机推荐
- shell 数组(in_array)
if [[ ! "${array[@]}" =~ $val ]] ; then fi
- Eclipse 运行ant build.xml
在命令行cmd运行mvn clean install,ant compiler,提示上述信息,是因为 maven的这个插件要求jdk1.6,但是本地电脑环境变量jdk版本为1.7.将JAVA_HOME ...
- Rolling cURL: PHP并发最佳实践
Rolling cURL: PHP并发最佳实践 在实际项目或者自己编写小工具(比如新闻聚合,商品价格监控,比价)的过程中, 通常需要从第3方网站或者API接口获取数据, 在需要处理1个URL队列时, ...
- 开启mysql慢查询日志并使用mysqldumpslow命令查看
mysql服务器有一项功能,可以检测到哪条sql语句查询得比较慢,就是慢查询slowlog,现在介绍如何开启. 在[mysqld]下面增加如下代码: long_query_time = 1 log-s ...
- 安装VS2010后,如何设置老版本的项目文件不是默认用VS2010打开
1.系统先后安装了VS2008和VS2010,在打开用VS2008创建的项目文件时总是会默认用VS2010打开,选择打开方式都不行,很不方便,差点要把VS2010卸载了. 其实只需要简单设置V ...
- 启用DHCP中继代理,实现跨子网服务 - Win 2003 Server
伴随着局域网规模的逐步扩大,一个网络常常会被划分成多个不同的子网,以便根据不同子网的工作要求来实现个性化的管理要求.考虑到规模较大的局域网一般会使用DHCP服务器来为各个工作站分配IP地址,不过一旦局 ...
- spark 操作hbase
HBase经过七年发展,终于在今年2月底,发布了 1.0.0 版本.这个版本提供了一些让人激动的功能,并且,在不牺牲稳定性的前提下,引入了新的API.虽然 1.0.0 兼容旧版本的 API,不过还是应 ...
- win7下搭建nginx+php的开发环境
本来在win7下用的是IIS做web服务器,但近来因项目需求的原因,需要在服务器遇到404错误的时候自动做转向(不是在客户端的跳转,而是在服务器收到客户端请求去某目录下读取文件返回时,如果发现目录或目 ...
- 一个简单的javascript获取URL参数的代码
function request(paras){ var url = location.href; var paraString = url.substring(url.indexOf("? ...
- django初探
如果是自己建站耍的话,还是用Php方便,毕竟Php服务器便宜又到处都是. 但是python毕竟是一个新鲜的东西,特别是django,以前一直东python的语法,而且是我最早学习的语言之一,但是一直停 ...