顾名思义,HTML Applications 是 HTML 应用程序,借助任何文本编辑器,使用等同于 HTML 的规则编写内容,将其以hta扩展名保存,得到的文件就是一个 HTML 应用程序,简称 HTA。
除了秉承 HTML 的许多特性之外,HTA 还有它自己特有的一些特性,这些特性用嵌入在 HTML 文档head元素中的HTA:Application元素来定义。下面的示例代码说明了HTA:Application元素在 HTA 中的应用:
复制上面的代码,将其保存为test.hta然后运行,它将显示一个对话框,确认该对话框后即退出程序。这是一个关于 HTA 的简单示例,将宿主平台所支持的脚本植入 HTA,它就可以完成很多有用的工作。
从以上示例可以看出,文档中title标签定义的内容将显示在 HTA 的标题栏中作为程序标题。
HTA 以 Microsoft® Internet Explorer 为宿主平台,由 mshta.exe 提供特性支持,对系统中 Internet Explorer 版本的更改也会更改 mshta.exe 的版本。由于 HTA 只依赖 IE,它集成了 IE 浏览器的对象模型、性能、渲染特性、协议支持以及通道下载技术等所有能力,却无须执行浏览器的严格安全模型和用户界面。因此在开发中可以以 IE 为标准,放心地使用各种 IE 支持的私有特性,而不必考虑这些特性与其它浏览器的兼容性。实际上 HTA 是一个非常宽松、快速的开发环境,在 HTA 中,可以省略任何非必须的标签,例如 html / head / body 等,这并不影响它的功能实现。
在文末的附录中提供了不同版本 mshta.exe 的合集,还有一个显示系统中 mshta.exe 版本的小程序,它也是用 HTA 做的。
自 Internet Explorer 7 以后(截止目前的IE11),HTA 中 appVersion 特性返回的 IE 版本总是MSIE 7.0,因此不要使用这样的方法检测浏览器的版本。
在调试中要注意:同样的代码,在同一台计算机上的 html 形式和 hta 形式下表现可能并不相同,可以通过头部信息的meta元素进行兼容性设置,例如:<meta http-equiv="X-UA-Compatible" content="IE=9" />。这样做的话,兼容模式只能设置IE9及其以下版本,更高版将不解释hta:application标签中的内容。
启用 HTA 对象扩展模型。
HTML | <HTA:Application ... /> |
---|---|
脚本 | N/A |
属性 | 描述 | 对应的脚本特性 | 说明 |
---|---|---|---|
applicationName | 设置 HTA 的名称。 | applicationName | 检索 HTA 的名称。 |
border | 设置 HTA 的边框类型。 | border | 检索 HTA 的边框类型。 |
borderStyle | 设置 HTA 窗口内容的边框类型。 | borderStyle | 检索 HTA 窗口内容的边框类型。 |
caption | 设置是否显示 HTA 窗口的标题栏。 | caption | 检索是否显示 HTA 窗口的标题栏。 |
N/A | N/A | commandLine | 检索 HTA 的路径。 |
contextMenu | 设置是否启用窗口内容的上下文菜单。 | contextMenu | 检索是否启用窗口内容的上下文菜单。 |
icon | 设置 HTA 的图标。 | icon | 检索 HTA 的图标。 |
innerBorder | 设置是否显示窗口内容的 3D 边框。 | innerBorder | 检索是否显示窗口内容的 3D 边框。 |
maximizeButton | 设置是否显示窗口最大化按扭。 | maximizeButton | 检索是否显示窗口最大化按扭。 |
minimizeButton | 设置是否显示窗口最小化按扭。 | minimizeButton | 检索是否显示窗口最小化按扭。 |
navigable | 设置页面中链接的目标窗口是当前窗口还是新窗口。 | navigable | 检索页面中链接的目标窗口是当前窗口还是新窗口。 |
scroll | 设置是否显示窗口滚动条。 | scroll | 检索是否显示窗口滚动条。 |
scrollFlat | 设置是否以 3D 样式显示窗口滚动条。 | scrollFlat | 检索是否以 3D 样式显示窗口滚动条。 |
selection | 设置是否允许选择文档内容。 | selection | 检索是否允许选择文档内容。 |
showInTaskBar | 设置是否在任务栏上显示程序图标。 | showInTaskBar | 检索是否在任务栏上显示程序图标。 |
singleInstance | 设置是否允许同时运行程序的多个实例。 | singleInstance | 检索是否允许同时运行程序的多个实例。 |
sysMenu | 设置是否提供系统菜单。 | sysMenu | 检索是否提供系统菜单。 |
version | 设置程序版本号。 | version | 检索程序版本号。 |
windowState | 设置窗口的初始状态。 | windowState | 检索窗口的初始状态。 |
注:1、在表中元素属性按脚本特性的大小写规则进行描述,在实际编写中属性名大小写并无区别。 2、所有的 HTA 脚本特性都是只读的。 |
HTA 如同 .exe 程序一样可以访问客户端文件和注册表,这可能使客户端计算机遭遇恶意脚本,因此不推荐使用安全性和来源可疑的 HTA。
HTA:Application 元素需要结束标签,但因它是一个空标签,因此可以使用 <HTA:Application />
这样的形式关闭。
在一个 HTA 中只允许一个 HTA:Application 标签,其后若有重复的都将被忽略。
尽管 <HTA:Application />
标签在 HTA 中的任意位置都可以正常工作,但是仍然建议按照规范来写。
设置或检索应用程序的名称。
HTML | <HTA:Application applicationName =sAppName ... > |
---|---|
脚本 | sAppName = HTA:APPLICATION.applicationName |
sAppName |
应用程序名称字符串。 |
此属性没有默认值,当属性未设置时,对应的脚本特性将返回一个空字符串。
当 singleInstance
属性值设为 yes
时,程序将检查 applicationName
的值,以此值来标识不同的应用程序。
设置或检索 HTA 的窗口边框。
HTML | <HTA:Application border =sType ... > |
---|---|
脚本 | sType = HTA:APPLICATION.border |
sType |
描述边框类型的字符串。为以下值之一:
|
此属性及其对应的脚本特性的默认值均为 thick
。
实际上 thick、diaglog、thin
的表现差异极小,而 thick
又是默认值。因此,在实际应用中 border
属性只有一个需要设置的值,即:在不需要窗口边框和标题栏时将其设置为 none
。
设置或检索 HTA 内容的边框样式。
HTML | <HTA:Application borderStyle =sStyle ... > |
---|---|
脚本 | sStyle = HTA:APPLICATION.borderStyle |
sStyle |
描述窗口内容边框样式的字符串。为以下值之一:
|
此属性及其对应的脚本特性的默认值均为 normal
。
设置或检索是否显示 HTA 窗口的标题栏。
HTML | <HTA:Application caption =bTitleBar ... > |
---|---|
脚本 | bTitleBar = HTA:APPLICATION.caption |
bTitleBar |
指明是否显示 HTA 窗口的标题栏。为以下值之一:
|
此属性及其对应的脚本特性的默认值均为 yes
。
当设置为 no
时,标题栏上的程序图标、标题、最小化按钮、最大化按钮、关闭按钮都无法显示。在此情况下,用户只能使用 Alt + F4 组合键关闭程序,因而建议调用 window 对象的 close 方法提供关闭功能。
检索 HTA 的路径。
HTML | N/A |
---|---|
脚本 | [sPath =] HTA:APPLICATION.commandLine |
sPath |
返回 HTA 的路径。 |
此特性没有默认值,它返回由一对双引号包含的路径字符串。
设置或检索是否允许显示 HTA 内容的上下文菜单。
HTML | <HTA:Application contextMenu =sContextMenu ... > |
---|---|
脚本 | [sContextMenu =] HTA:APPLICATION.contextMenu |
sContextMenu |
指定为下列值之一:
|
此属性及其对应的脚本特性的默认值均为 yes
。
此属性设置为 no
时将禁用所有元素的上下文菜单,包括 textarea / input(type=text) 等。
设置或检索 HTA 的图标。
HTML | <HTA:Application icon =sIcon ... > |
---|---|
脚本 | [sIcon =] HTA:APPLICATION.icon |
sIcon |
描述 HTA 图标路径和名称的字符串。 |
此属性没有默认值,当属性未设置时,对应的脚本特性将返回一个空字符串。
除了直接使用标准的 ico 格式图标文件之外,还可以指定为包含图标资源的其它格式文件,如 exe / dll 文件,如果未进一步指明要调用的图标名称,将使用该文件中的默认图标。不指定图标或指定的图标不存在时,将显示 mshta.exe 的图标。
设置或检索是否显示 HTA 的内边框。
HTML | <HTA:Application innerBorder =sInnerBorder ... > |
---|---|
脚本 | [sInnerBorder =] HTA:APPLICATION.innerBorder |
sInnerBorder |
指定为下列值之一:
|
此属性及其对应的脚本特性的默认值均为 yes
。
此属性指定 HTA 的内边框,与之对应的属性是 border
,后者指定 HTA 的外边框。
设置或检索窗口的最大化按扭是否可用。
HTML | <HTA:Application maximizeButton =bShowButton ... > |
---|---|
脚本 | [bShowButton =] HTA:APPLICATION.maximizeButton |
bShowButton |
指定为下列值之一:
|
此属性及其对应的脚本特性的默认值均为 yes
。
窗口必须拥有标题栏,才能使此属性设置为 yes
时发挥作用。因此,当 border
属性或 caption
属性设置为 no
时将覆盖此属性的表现。
当 maximizeButton
/ minimizeButton
两者都设置为 no
时,窗口上将不显示这两个按扭。
此属性的设置也会影响到标题栏的右键菜单,以及 HTA 在任务栏上的按扭的右键菜单。
设置窗口的最小化按扭是否可用。
HTML | <HTA:Application minimizeButton =bShowButton ... > |
---|---|
脚本 | [bShowButton =] HTA:APPLICATION.minimizeButton |
bShowButton |
指定为下列值之一:
|
此属性及其对应的脚本特性的默认值均为 yes
。
窗口必须拥有标题栏,才能使此属性设置为 yes
时发挥作用。因此,当 border
属性或 caption
属性设置为 no
时将覆盖此属性的表现。
当 minimizeButton
/ maximizeButton
两者都设置为 no
时,窗口上将不显示这两个按扭。
此属性的设置也会影响到标题栏的右键菜单,以及 HTA 在任务栏上的按扭的右键菜单。
设置或检索是否允许在 HTA 中打开链接。
HTML | <HTA:Application navigable =sNavigable ... > |
---|---|
脚本 | [sNavigable =] HTA:APPLICATION.navigable |
sNavigable |
指定为下列值之一:
|
此属性的默认值为 no
,当属性未设置时,对应的脚本特性将返回 undefined
。
设置或检索是否显示 HTA 窗口的滚动条。
HTML | <HTA:Application scroll =sScroll ... > |
---|---|
脚本 | [sScroll =] HTA:APPLICATION.scroll |
sScroll |
指定为下列值之一:
|
此属性及其对应的脚本特性的默认值均为 yes
。
设置 body
元素的 scroll
属性为 no
也可以防止显示滚动条。
设置或检索是否以 3D 样式显示滚动条。
HTML | <HTA:Application scrollFlat =sScrollFlat ... > |
---|---|
脚本 | [sScrollFlat =] HTA:APPLICATION.scrollFlat |
sScrollFlat |
指定为下列值之一:
|
此属性及其对应的脚本特性的默认值均为 no
。
此属性的表现与 Windows 主题有关。例如,在 Windows 8 默认主题下,无论此属性设置为何值,始终显示扁平样式的滚动条。
设置或检索页面内容是否可以被选择。
HTML | <HTA:Application selection =sSelection ... > |
---|---|
脚本 | [sSelection =] HTA:APPLICATION.selection |
sSelection |
指定为下列值之一:
|
此属性及其对应的脚本特性的默认值均为 yes
。
此属性设置为 no
时将禁止页面上下文菜单,它会覆盖 contextMenu
="yes
" 的设置。
此属性设置为 no
时,若 HTML 元素的 contentEditable
属性设置为 yes
,那么该 HTML 元素的内容将可以被选择,但仍然不能显示上下文菜单。
设置或检索是否在 Windows 任务栏上显示 HTA。
HTML | <HTA:Application showInTaskBar =bShow ... > |
---|---|
脚本 | [bShow =] HTA:APPLICATION.showInTaskBar |
bShow |
指定为下列值之一:
|
此属性及其对应的脚本特性的默认值均为 yes
。
此属性不会影响用户使用 Alt + Tab 组合键打开应用程序切换列表时的表现。
设置或检索是否允许打开应用程序的多个实例。
HTML | <HTA:Application singleInstance =bOpen ... > |
---|---|
脚本 | [bOpen =] HTA:APPLICATION.singleInstance |
bOpen |
指定为下列值之一:
|
此属性及其对应的脚本特性的默认值均为 no
。
当此属性设置为 yes
时,applicationName
属性必须有且仅有唯一的值。当启动一个 singleInstance
=yes
的 HTA 时,系统将首先检测是否已经有相同 applicationName
值的程序在运行,若检测到则不会执行任何操作,否则将打开请求的 HTA。
设置或检索是否启用应用程序窗口的系统菜单。
HTML | <HTA:Application sysMenu =bMenu ... > |
---|---|
脚本 | [bMenu =] HTA:APPLICATION.sysMenu |
bMenu |
指定为下列值之一:
|
此属性及其对应的脚本特性的默认值均为 yes
。
禁用系统菜单时,窗口标题栏的关闭、最大化、最小化按扭及程序图标都不被显示。在这种情况下,Windows Vista/7/8 任务栏上的右键菜单只提供关闭功能,Windows XP 以下平台任务栏上的右键菜单也将被禁用。
设置或检索应用程序的版本号。
HTML | <HTA:Application version =sVersion ... > |
---|---|
脚本 | [sVersion =] HTA:APPLICATION.version |
sVersion |
定义应用程序版本号的字符串。 |
此属性没有默认值,当属性未设置时,对应的脚本特性将返回一个空字符串。
设置或检索窗口的初始大小。
HTML | <HTA:Application windowState =sWindowSize ... > |
---|---|
脚本 | [sWindowSize =] HTA:APPLICATION.windowState |
sWindowSize |
指定为下列值之一:
|
此属性及其对应的脚本特性的默认值均为 normal
。
在 Windows XP 平台上,此属性设为 minimize
时,window 对象的的 resizeTo 方法和 moveTo 方法必须在 HTA:Application 标签之前调用才能被执行;反之,若设为 maximize
时,window 对象的的 resizeTo 方法和 moveTo 方法必须在 HTA:Application 标签之后调用才能被执行。
当 windowState
设置为 maximize
,并且 border
设置为 none
时,HTA 将以全屏呈现。
表明是否为对象启用 HTA 安全机制。
HTML | <ELEMENT APPLICATION =bApplication ... > |
---|---|
脚本 | N/A |
bApplication |
布尔值(yes/no),表明对象内容的可信性。 默认为 no ,即:所有的 frame/iframe 都是不被信任的。 |
application
属性仅用于 HTA 中包含的 iframe
和 frame
元素。
使用此属性可以在 HTA 的不同框架中同时访问因特网上的内容和安全内容,也可以使 HTA 能够使用跨域脚本。
此属性具有继承性。例如,当一个受信任的 iframe
内含 frame
时,后者也将被信任,反之,要使子框架被信任,其父框架必须设为信任。
HTA 的安全机制会防止它内嵌的未信任框架内的脚本访问,未信任的框架也不能从 HTA 中打开链接。
这里收集了一些与 HTA 有关的资料、代码和程序等。