关于MSHTML (转)

关于MSHTML(转)[@more@]microsoft.com/default.ASP”target=_top>MSDNHome>MSDNLibrary>ProgrammingandR…

大家好,又见面了,我是你们的朋友全栈君。

关于MSHTML (转)[@more@]
microsoft.com/default.

ASP” target=_top>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示例中,这些示例在DOWNLOADs/samples/inte.NET/browser/colbtn/default.asp”>Colbtn示例源代码页面、Driller示例源代码页面WalkAll示例源代码页面上。

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

使用接口的建议

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

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

例子

Page Title

function Loaded()

{

  var c = document.all.length;

  var i;

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

  {

  spanTAGS.innerHTML = spanTAGS.innerHTML + document.all.item(i).tagName + “
“;

  }

}

获得文档接口

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

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

集成MSHTML时获得文档接口

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

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

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

  1. 调用 webbrowser/reference/ifaces/iwebbrowser2/document.asp”>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 (译者注:原文如此,似乎应该改成get_all)方法获得的。 这个方法返回一个包含文档的所有元素的IHTMLElementCollection接口。然后你可以使用IHTMLElementCollection::item方法枚举元素。 IHTMLElementCollection::item方法为你提供一个你能调用 QueryInterface ,请求IID_IHTMLElement的IDispatch指针。这将会给你一个你能用来为个别的元素获得或设置信息的IHTMLElement接口指针。

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

相关的主题

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-960761/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10752043/viewspace-960761/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/126318.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月17日 下午10:00
下一篇 2022年4月17日 下午10:00


相关推荐

  • Delphi中QuotedStr()

    Delphi中QuotedStr()1.定义给字符串两边加单引号并返回.声明:functionQuotedStr(constS:string):string;用函数QuotedStr把字符串S转换成为用引号括起来的字符串。单引号”’”将被插入到字符串s的最前和最后。2.范例特别可以应用在delphi的中的SQL语句,避免漏写的情况。lsstr:=…+QuotedStr(‘STR’)+…lsstr:=…+’WHERE‘’‘+‘abc‘+’’’…’QTmpR2.Close;QT

    2022年10月18日
    7
  • powerDesigner生成HTML报表

    powerDesigner生成HTML报表报告-GenerateReport

    2025年12月8日
    8
  • 矩阵可相似对角化的条件

    矩阵可相似对角化的条件矩阵可以对角化的条件为有 n 个线性无关的特征向量 具体判断为 1 实对称矩阵必定可以相似对角化 2 如果特征值两两互不相同或 那么也可以立马断定矩阵可以相似对角化 3 如果有 k 重特征值 那么 n r E A k 因为只有这个等式成立 才能说明特征值取 时有 k 个线性无关的解向量 即特征向量

    2026年3月16日
    1
  • mysql 在命令行和navicat 查出来的数据不一致,你遇到过吗?[通俗易懂]

    mysql 在命令行和navicat 查出来的数据不一致,你遇到过吗?

    2022年2月10日
    52
  • 扩展卡尔曼滤波算法及仿真实例[通俗易懂]

    扩展卡尔曼滤波算法及仿真实例[通俗易懂]在阅读本篇博客之前希望读者已经具备线性卡尔曼滤波器的基础,或者提前研读我的前一篇关于线性卡尔曼滤波器的文章:线性卡尔曼滤波算法及示例。下面不说废话,直奔主题了。一、扩展卡尔曼滤波器(EKF)理论基础扩展Kalman滤波器算法实质上是一种在线线性化技术,即安装估计轨道进行线性化处理—-泰勒级数展开,再进行线性的Kalman滤波。实际非线性滤波处理,通常对过程噪声和观测噪声近似为高斯分布,…

    2022年6月22日
    105
  • android flag_activity_new_task结束,怎样避免使用Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TA…[通俗易懂]

    android flag_activity_new_task结束,怎样避免使用Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TA…[通俗易懂]在自己的项目中。我须要使用Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TASK来開始新的activity同一时候移除之前全部的activity。我使用这个intentflag的代码例如以下:Intentintent=newIntent(Gerenxinxi.this,MainPart.class);intent….

    2022年10月6日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号