【问题标题】:HTA - How to close HTA after form is submittedHTA - 提交表单后如何关闭 HTA
【发布时间】:2019-03-18 15:38:23
【问题描述】:

全新的 HTA。我有 HTML 页面,允许用户为我们的一个应用程序提交密码请求。这一切正常,直到机器升级到 Windows 10,我不再有权获取对象电子邮件和用户帐户。好消息,如果我将文件保存为 HTA,它会起作用。 但是一旦提交表单,它就会在javascript位上关闭表单,然后重新加载表单。 如何: 在提交按钮上运行 JavaScript 代码然后关闭 HTA?

    <html>
    <head>
    <title>Test Form</title>
    <HTA:APPLICATION>
    <body oncontextmenu="return false"  onload='setFocusToTextBox()'>

    <h1><strong>Test Password reset</strong></h1>
    </head>
    <script Language="VBScript">

    Option Explicit

    Sub Window_Onload

       window.resizeTo 640, 480
       dataarea.innerhtml = "<form  name=""MyForm"" autocomplete=""off"" onsubmit=""WriteFile()"">" & _
       "<p>" & _
       "<h4>FDM Username:" & _ 
       "<input type=""text"" id=""uname"" placeholder=""Username (eg: SMITHA)"" required/></h4>" & _
       "<center><h5>(eg: WHITEP)</h5></center>" & _
       "<br>" & _
       "<h4><input class=""button""  name=""button"" type=""submit"" value=""Submit Request"" id=""SubBtn"" onclick=""changeSubmit();""/></h4>" & _
       "</p>" & _
       "</form>"      



     end sub

     Sub CloseWin
       Self.Close()
       Window.Close()
      End Sub
     </script>

     <span id=DataArea></span>

    <script language="javascript">

    function WriteFile() {

       var getResult = confirm("Rquest submitted, HERE IS THE PROBLEM WHEN CLICK OK, IT RELOAD THE FORM IN A NEW SCREEN.");
      CloseWin();
    }

    function changeSubmit() {
        document.getElementById("SubBtn").value="Submitted"; 

     }

    function setFocusToTextBox(){
        document.getElementById("uname").focus();
    }

     </script>
     </body>
    </html>

【问题讨论】:

    标签: javascript html hta


    【解决方案1】:

    欢迎来到 HTA 的世界。

    简短的回答是,您可以简单地从您的 javascript 函数中调用 closeWin()(带有括号的 vbscript 子程序)。

    在测试您的代码时,我遇到了一些错误,因为调用函数 onsubmit 和 onclick 的 html 部分需要在标签中指定语言

    <input type="button" onclick="myfunction()" language="javascript"/>
    

    此外,关于 HTA 文件,您需要了解的最重要的事情是如何设置文件将使用的 Internet Explorer 版本。默认情况下它是 7 我认为所以你会发现像“占位符”这样的最新 HTML 将不起作用。您可以使用元标记更改它(见下文)。如果你想让 vbscript 工作,不要超过 10。

    <meta http-equiv="x-ua-compatible" content="ie=10" />
    

    ** 更新 **

    我查看了您更新的代码,它是打开浏览器的表单提交。您真的不需要提交表单,甚至不需要将文本框和按钮包含在表单中。

    我更改了您的 onload 子程序并将焦点代码添加到其中,因为 Javascript 在 VBScript 之前运行并且无法设置焦点,因此出现错误。我拿出函数 setFocusToTextBox()

    唯一缺少的是当用户按下 ENTER 时请求不会自动处理,因此他们必须按下按钮。有办法解决这个问题,但这并不是什么大问题。

    Sub Window_Onload
    
       window.resizeTo 640, 480
       dataarea.innerhtml = "" & _
       "<p>" & _
       "<h4>FDM Username:" & _ 
       "<input type=""text"" id=""uname"" placeholder=""Username (eg: SMITHA)"" required/></h4>" & _
       "<center><h5>(eg: WHITEP)</h5></center>" & _
       "<br>" & _
       "<h4><input class=""button""  name=""button"" type=""button"" value=""Submit Request"" id=""SubBtn"" onclick=""WriteFile()""/></h4>" & _
       "</p>"     
    
    document.getElementById("uname").focus()
    
     end sub
    

    【讨论】:

    • 嗨,戈登,非常感谢您的帮助。不幸的是,如果不重新加载页面的新标签,我仍然无法关闭屏幕。
    • 您是否将 for 提交到 Web/Intranet 地址?听起来 hta 正在导航到新页面,这就是要关闭的代码没有运行的原因。您可以尝试将表单放入 iframe。
    • 提交表单时,javascript 创建一个文本文件并显示消息“文件已提交”,然后它应该退出 HTA。我会尝试在这里放置一个简单的代码。
    • 如果您没有将表单提交到 url,那么您可以将按钮更改为 onclick 而不是 onsubmit,这样它就不会离开 hta 代码。
    • 太棒了。它工作得很好。我添加了 以显示 ICON="images/favicon.ico" 在服务器上运行时显示,但从快捷方式运行时不显示。非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多