关于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 ...
随机推荐
- UWP APP 开发日记
最近需要使用C#开发UWP应用,以前学习过C,这回就是快速看了一下C#的一些特别之处,然后就进入到了实战练习当中. 1.按照MSDN的教程自己搭建了一个简单的“Hello, world”应用.是使用C ...
- Oracle 增加修改删除字段
Oracle 增加修改删除字段 添加字段的语法:alter table tablename add (column datatype [default value][null/not null],…. ...
- Spring Boot Web项目之参数绑定
一.@RequestParam 这个注解用来绑定单个请求数据,既可以是url中的参数,也可以是表单提交的参数和上传的文件 它有三个属性,value用于设置参数名,defaultValue用于对参数设置 ...
- jq事件绑定
有些时候我们在页面中会动态的添加一下dom结构,当我们想要给这些结点添加事件时需要在此节点绑定一系列的操作. <a href="#" onclick="addBtn ...
- php中文匹配
PHP判断字符串中是否含有中文 <? $str = "测试中文"; echo $str; echo "<hr>"; //if (preg_ma ...
- Bug :”解压压缩文件失败: cpio; 在头中不存在归档“
问题描述: 在rpm包目录下执行rpm -ivh *rpm -force时,出现标题错误 解决办法: *src.rpm包也就源码包不能被直接进行安装,需要先将src.rpm包进行编译生成二进制的rpm ...
- CentOS 网络设置修改 指定IP地址 DNS 网关(转)
CentOS 网络设置修改 指定IP地址 DNS 网关(实测 笔记) 环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G) 系统版本:Centos-6.5-x86_64 ...
- HashMap HashTable HashSet区别剖析
HashMap.HashSet.HashTable之间的区别是Java程序员的一个常见面试题目,在此仅以此博客记录,并深入源代码进行分析: 在分析之前,先将其区别列于下面 1:HashSet底层采用的 ...
- 基于.NET MVC的高性能IOC插件化架构(二)之插件加载原理
上一篇博文简单介绍了下插件化的代码组成部分:http://www.cnblogs.com/gengzhe/p/4390932.html,源码地址:https://github.com/luohuazh ...
- Oracle 存储过程介绍
存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR REPLACE PROCEDURE ...