HTA调用外部VBS脚本更新div时报object required错误如何解决
问题核心原因
- 脚本执行时机错误:你将外部VBS的引用放在
<head>标签内,脚本会在解析到的瞬间立刻执行,此时<body>内的DOM元素(包括你要操作的id="refreshed"的div)还没有完成渲染,getElementById只能拿到空值,调用innerHTML自然会报“object required”错误。 - 不必要的前缀:你的页面没有嵌套iframe,不需要加
parent前缀,直接调用document即可。
解决步骤
- 调整脚本引入位置:把
<head>里的<script language="VBScript" src=".\data\pausentool.vbs"></script>这行代码剪切到</body>结束标签的前面,确保DOM完全加载后再执行VBS逻辑。 - 修改元素获取代码:把
pausentool.vbs里的Set oRefreshed = parent.document.getElementById("refreshed")改为Set oRefreshed = document.getElementById("refreshed")。
可选优化方案
你可以把VBS执行逻辑包裹在window_onload事件中,进一步避免加载时机问题,修改后的VBS代码示例:
Sub window_onload If loaded Then sHour = Hour(Now()) sMinute = Minute(Now()) sSec = Second(Now()) If Len(sSec) = 1 Then sSec = "0" & sSec If Len(sMinute) = 1 Then sMinute = "0" & sMinute If Len(sHour) = 1 Then sHour = "0" & sHour Dim oRefreshed Set oRefreshed = document.getElementById("refreshed") oRefreshed.innerHTML = sHour & ":" & sMinute & ":" & sSec Else Dim Msg, Style, Title Msg = "Dieses Script kann nicht alleine gestartet werden. Bitte nutze stattdessen die Pausentool.hta! Bei Fragen wende dich gerne an den Entwickler." Style = vbOKOnly + vbCritical + vbDefaultButton2 Title = "falsche Datei" MsgBox Msg, Style, Title End If End Sub
额外提示
你的HTML代码中<tr>标签下直接放置<div>不符合HTML规范,建议把所有直接放在tr下的div都包裹在<td>标签内,避免IE内核出现渲染异常。
内容的提问来源于stack exchange,提问作者Soyaro
相关产品推荐
相关产品推荐

