1

我正在解析和处理由 Word 创建的现有 HTML 文件(无法重新创建文件)。带有嵌入图像的 HTML 文件包括支持 vml 的浏览器的条件格式,类似于以下内容:

     <!--[if gte vml 1]>
     <v:shape
     id="_x0000_i1042" type="#_x0000_t75" style='width:24pt;height:24pt'>
     <v:imagedata src="test_files/image002.png" o:title="Text-HighlightColor-icon_32x32"/>
    </v:shape>
    <![endif]-->
    <![if !vml]>
    <img width=32 height=32 src="test_files/image002.png" v:shapes="_x0000_i1042">
    <![endif]>

我将 HTML 文件加载到IHTMLDocument2对象的一个​​实例中。由于 IE 支持 VML,它解析出<img>上面的标签,只留下shapeimagedata标签。我宁愿忽略所有 vml 特定标签,只使用<img>标签。

有没有办法以编程方式禁用 VML 支持(类似于IHTMLDocument2.desgnMode = "On"禁用脚本)?

4

1 回答 1

1

Word 生成的内容称为“条件注释”。更具体地说,我们这里有“下层隐藏的条件注释”,它采用以下形式:

<!--[if expression]> HTML <![endif]-->

使用expression运算符和“版本向量”。通常,这些向量指的是“IE”并用于处理HTML 兼容性问题

但是您可以使用自定义版本向量:

如果您开发附加组件,您可以使用自定义版本向量为网页提供版本信息。要定义自定义版本向量,请将 REG_SZ 值添加到版本向量注册表项。新键的名称定义了在条件注释中使用的特征值,如此处所示。

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Internet Explorer
            Version Vector
               Contoso = 0.9

前面的示例使用自定义版本向量来指示虚构 Contoso 控件的预发布版本 (0.9) 安装在用户的计算机上。下一个示例显示了条件注释如何使用此信息。

<!--[if lt Contoso 2]>
<p>Your version of the Contoso control is out of date; Please update to the latest.</p>
<![endif]-->

由于 VML 本身是一个(嵌入式)附加组件,因此您可以HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Version Vector\VML在 64 位操作系统上使用密钥和/或 32 位的HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Internet Explorer\Version Vector\VML。显然,完全删除密钥解决了您的问题。

于 2017-09-16T06:39:22.377 回答