子功能在 HTA 中不起作用

2024-03-03

我不知道为什么,但我的子功能不起作用。我以为我已经遵循了它应该如何工作,但它只会导致一个错误,声称我的函数未定义。

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="x-ua-compatible" content="IE=edge">
<title>Remote Registry</title>
<HTA:APPLICATION
  APPLICATIONNAME="Remote Registry"
  ID="RemReg"
  VERSION="1.0.0.0"
  SCROLL="no"
  SINGLEINSTANCE="yes"
  CONTEXTMENU="no"
  NAVIGABLE="yes"
 SELECTION="no"
/>
<style type="text/css">
body
{
    margin: 0;
    width: 130px;
    height: 180px;
    overflow: hidden;
        font-family: arial;
    font-weight: bold;
    font-size: 12px;
}
</style>
</head>
<SCRIPT LANGUAGE="VBScript">
Sub CheckService
    strComputer = txtBox.value
    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colRunningServices = objWMIService.ExecQuery _
        ("Select * from Win32_Service Where Name=""RemoteRegistry""")
    For Each objService in colRunningServices 
    Output = objService.DisplayName  & " is " & objService.State
    Next
End Sub
</script>
<body>
    <input type="text" name="TxTbox" size="30" value=DTP-> Computer to check<br />
    <input id=checkservice type="button" value="Add Button" onClick="CheckService">
    <div id="strComputer"></div>
</body>
</html>

我缺少什么?真的很简单吗?我尝试过该函数的替代名称,将其移动到 VBScript 所在的位置。没有任何作用:sRem


The "[子程序名称]未定义" 当 HTA 文档模式为 9 或更高并且从 HTML 代码调用子例程时会发生错误without括号。

在这种特殊情况下,代码onClick="CheckService"本来应该:onClick="CheckService()"

请注意,此 HTA 的文档模式是不明确的,因为它被声明为:

<meta http-equiv="x-ua-compatible" content="IE=edge">

这会导致 HTA 中的 HTML 代码使用 MSHTML.dll 提供的最高文档模式呈现。与edge浏览器无关.

在具有 MSHTML 8 或更低版本的计算机上测试此 HTA 的人不会看到错误。在任何具有 MSHTML 9 或更高版本的计算机上,都会发生该错误。请注意,MSHTML 9 对应于 2011 年发布的 Internet Explorer 9。因此,到 2013 年,当发布此问题时,大多数计算机都会收到发布的脚本错误。

非官方接受的答案通过删除meta线,导致 HTA 运行IE 7模式,在 HTML 代码中调用子例程时不需要括号。在这种情况下,降级 HTA 文档模式可能不会产生负面影响,但可能会导致 HTML/CSS 代码产生与预期不同的结果。

有关 HTA 文档模式的更多背景信息:

HTA 应瞄准specific文档模式以确保 HTML/CSS 代码始终按预期工作。这ie=edge选项只能由包含不同 MSHTML 版本的多个 HTML 代码部分的专家编码人员使用。现在它已经过时了,因为任何生产中的机器都应该有 MSHTML 11,它于 2013 年发布,并且永远不会有任何进一步的升级。 (注意:Windows 11 包含 MSHTML 11,因此 HTA 仍然有效。)通常,HTA 应针对 IE=9、IE=10 或 IE=11。选择这三种文档模式中的一种有一些具体原因,但那是完全不同的讨论。

HTA 通常应以如下代码开头:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" http-equiv="X-UA-Compatible" content="IE=9">
<hta:application id=oHTA>
</head>

如果您的 HTA 没有DOCTYPE or X-UA-兼容声明,它将运行在IE 5默认模式。如果它只有DOCTYPE声明,它将运行在IE 7默认模式。然而,如果有一个FEATURE_BROWSER_EMULATION注册表设置为执行程序,那么default模式将是该注册表值中设置的任何内容。

如果您的 HTA 有X-UA-兼容声明,无论任何注册表设置如何,它都将以该模式运行(假设计算机没有旧版本的 MSHTML),因此请务必包含meta如上所示的行(注意:UTF-8 部分是可选的,但对于使用特殊字符很有帮助)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

子功能在 HTA 中不起作用 的相关文章