HTML 有两个动作的按钮。其中之一要延期

HTML Button with two actions. One of them to be delayed

首先我要感谢这个论坛帮助我解决了其他用户以前回答的问题。你们摇滚!

虽然这个问题我找不到答案。

我有这个小的 .HTA 页面。它基本上是一个包含两个 iframe 和一个刷新按钮的状态页面。 其中一个 iframe 包含一个 .html 页面,该页面在重新加载时会更新。 另一个 iframe 包含本地存储的 .htm 页面。每次保存特定 excel 文档时都会自动重新发布此 .htm 页面。

所以。我希望这个刷新按钮可以刷新整个 .hta(因为它会刷新两个 iframe)。但在此之前,我希望刷新按钮能够打开 excel 文档。本文档已经编写了运行一些宏,这些宏会写入所需的数据,保存并关闭excel(并在此重新发布本地.htm 页面)。我的问题是这个 excel 文档执行操作大约需要 3 秒,所以我需要延迟刷新。

有谁知道如何在我的按钮点击操作之上添加延迟刷新操作 "runprogram1"?

希望它有意义。

到目前为止,这是我的代码:(编辑了一些私有 url)。

<html>
 <head>
 <HTA:APPLICATION ID="webpad0"
 APPLICATIONNAME="webpad"
 BORDER="yes"
 INNERBORDER="no"
 CAPTION="yes"
 SELECTION="no"
 SHOWINTASKBAR="yes"
 SINGLEINSTANCE="yes"
 SYSMENU="yes"
 SCROLL="no"
 TITLEBAR="yes"
 ICON="ico.ico"
 NAVIGABLE="true"
 SCROLLFLAT="yes"
 SCROLL="no"></HTA:APPLICATION>

 <script language="vbscript">
 winWidth=600
 winHeight=800
 window.resizeto winWidth,winHeight
 centerX=(screen.width-winWidth)/2
 centerY=(screen.height-winHeight)/2
 window.moveto centerX,centerY
 posX=0
 posY=0
 move=0
 Function closeHTA()
 self.close
 End Function
 Function setPos()
 posX=window.event.screenX
 posY=window.event.ScreenY
 move=1
 End Function
 Function moving()
 If move=1 Then
 moveX=0
 moveY=0
 moveX=window.event.screenX-posX
 moveY=window.event.screenY-posY
 window.moveto(window.screenLeft+moveX),(window.screenTop+moveY)
 setPos()    
 End if
 End Function
 Function stopMoving()
 move=0
 End Function
 </script>

<script language="VBScript"> 
Sub RunProgram1 
Const NORMAL_WINDOW = 1
Set objShell = CreateObject("Shell.Application")
objShell.ShellExecute "excel.exe", "file://xxx.xlsm", , , NORMAL_WINDOW
End Sub
</script>

</head>

<button type="button" style="position:absolute; top:700px; left:39px; width=86px; " onclick="runprogram1">Refresh</button>

<iframe width=320 height=300 frameborder=0 scrolling=no src="http://xxx"></iframe> 
<iframe width=560 height=220 frameborder=0 scrolling=no src="xxx.htm"></iframe>
</body>
 </html>

要刷新 HTA 洞,您可以尝试类似的方法:

<button type="button" style="position:absolute; top:700px; left:39px; width=86px; " onclick="self.location.reload()">Reload HTA</button>

你可以使用 window.setTimeout,像这样:

<script language="VBScript">
    Sub delayedRefresh
        window.location.reload()
    End Sub

    Sub RunProgram1
        Const NORMAL_WINDOW = 1
        Set objShell = CreateObject("Shell.Application")
        objShell.ShellExecute "excel.exe", "file://xxx.xlsm", , , NORMAL_WINDOW

        Call window.setTimeout(GetRef("delayedRefresh"), 3000)

    End Sub
</script>

3000是3秒,以毫秒为单位,您可以根据需要调整该值。