HTA - Как закрыть HTA после отправки формы - PullRequest
2 голосов
/ 18 марта 2019

Полностью новый с 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>

1 Ответ

1 голос
/ 25 марта 2019

Добро пожаловать в мир HTA.

Короткий ответ: вы можете просто вызвать closeWin () (ваш подпрограмма vbscript с квадратными скобками) из функции javascript.

Во время тестирования вашего кода у меня возникли некоторые ошибки, потому что html-части, вызывающие functins onsubmit и onclick, должны указывать язык в теге

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

Кроме того, самое важное, что вам нужно знать о файлах HTA, - это указать, какую версию Internet Explorer будет использовать этот файл. По умолчанию это 7, я думаю, поэтому вы обнаружите, что более поздние HTML, такие как "заполнитель", не будут работать. Вы можете изменить это с помощью метатега (см. Ниже). Не превышайте 10, если хотите, чтобы vbscript работал.

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

** ОБНОВЛЕНИЕ **

Я посмотрел на ваш обновленный код, и именно браузер открывает форму разрешения. Вам действительно не нужна форма для отправки или даже для того, чтобы текстовое поле и кнопка содержались внутри формы.

Я изменил вашу подпрограмму onload и добавил к ней код фокуса, так как получал ошибку, потому что Javascript работал до VBScript и не мог установить фокус. Я вынул функцию setFocusToTextBox ()

Единственное, чего не хватает, так это того, что запрос не обрабатывается автоматически, когда пользователь нажимает клавишу ВВОД, поэтому ему приходится нажимать кнопку. Есть способ обойти это, но это не очень большая проблема.

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