gpt4 book ai didi

html - 子功能在 HTA 中不起作用

转载 作者:行者123 更新时间:2023-12-03 09:27:58 25 4
gpt4 key购买 nike

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

<!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

最佳答案

当 HTA 文档模式为 9 或更高并且从不带括号的 HTML 代码调用子例程时,会出现“[子例程名称]未定义”错误。

在本例中,代码 onClick="CheckService"应该是:onClick="CheckService()"

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

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

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

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

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

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

HTA 应针对特定文档模式,以确保 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 没有 DOCTYPEX-UA-Compatible 声明,则默认情况下它将在 IE 5 模式下运行。如果只有DOCTYPE声明,则默认以IE 7模式运行。但是,如果 mshta.exeFEATURE_BROWSER_EMULATION 注册表设置,则默认模式将是该注册表值中设置的任何值。

如果您的 HTA 有 X-UA-Compatible 声明,则无论任何注册表设置如何,它都会在该模式下运行(假设计算机没有旧版本的 MSHTML),因此确保包含如上所示的 meta 行(注意:UTF-8 部分是可选的,但有助于使用特殊字符)。

关于html - 子功能在 HTA 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16300218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com