Сохранение полей формы (input / select / checkbox) в файле .hta. Таким образом, оригинальный пользователь и / или другой пользователь может открыть и просмотреть заполненную информацию - PullRequest
0 голосов
/ 06 ноября 2018

Мне нужна помощь с файлом .hta, который я создаю для своей работы. Я хорошо разбираюсь в HTML, но JavaScript - это еще одна сфера для меня. Мне всегда удавалось смотреть на примеры и собирать воедино разные примеры, но то, что я пытаюсь сделать, выходит за рамки моей компетенции.

Прямо сейчас я успешно создал .hta, который позволяет пользователю установить флажок, сообщающий код для выбора школы, затем выбрать опцию в раскрывающемся списке и добавить любую другую информацию в текстовое поле. Когда пользователь нажимает сохранить изменения, он выводит файл .xml.

Моя проблема заключается в том, что когда пользователь закрывает файл .hta, все поля, поля выбора и флажки при повторном открытии остаются пустыми. Я искал примеры кода везде, пытаясь найти способ сохранить данные. Я не буду вдаваться в подробности, но html5 localstorage не будет работать, и cookie-файлы JavaScript не будут работать, потому что они ограничены локальным пользователем.

Я хочу сохранить все введенные данные, чтобы любой пользователь (с любой рабочей станции) мог открыть .hta и не заполнять все поля и выборки.

Три решения, которые я нашел:

  1. Внешний сериализованный файл JSON, сохраненный локально, а затем вызываемый при открытии .hta.

  2. Используя этого парня JavaScript: hta-localstorage

  3. Считать информацию из созданного .xml файла.

К сожалению, мне не хватает знаний о том, как реализовать любой из этих вариантов. Если я приведу пример моего существующего кода, может ли кто-нибудь помочь мне реализовать один из ранее упомянутых методов? Или, может быть, у кого-то есть более легкая альтернатива?

Сценарий:

<script>
function WriteToFile()
{
  try 
  {
    var WshNetwork = new ActiveXObject("WScript.Network");
    var userName = WshNetwork.UserName;
    var fso, s;
    fso = new ActiveXObject("Scripting.FileSystemObject");
    s = fso.CreateTextFile("xml_output/sc_output.xml", true);

    var B_B_P=document.getElementById("A_Bright_Beginning_Preschool").checked;
    var B_B_P_selected=document.getElementById("A_Bright_Beginning_PreschoolSelected").value;   
    var B_B_P_other=document.getElementById("A_Bright_Beginning_PreschoolOther").value;

    var A_S_Cath_S=document.getElementById("All_Saints_Catholic_School").checked;
    var A_S_Cath_S_selected=document.getElementById("All_Saints_Catholic_SchoolSelected").value;    
    var A_S_Cath_S_other=document.getElementById("All_Saints_Catholic_SchoolOther").value;

s.writeline("\<\?xml version\=\"1\.0\" encoding\=\"UTF\-8\" standalone\=\"yes\"\?\>");
s.writeline("\<School\_data xmlns\:xsi\=\"http\:\/\/www\.w3\.org\/2001\/XMLSchema\-instance\"\>");

if (B_B_P==false)
        {
        s.writeline("");
        }
        else
            {
            s.writeline("   \<record\>");
            s.writeline("       \<School\_Name\>A Bright Beginning Preschool\<\/School\_Name\>");
            s.writeline("       \<School\_Seq\>001\<\/School\_Seq\>");
            s.writeline("       \<Delay\>" + B_B_P_selected + "\<\/Delay\>");
            s.writeline("       \<Other\>" + B_B_P_other + "\<\/Other\>");
            s.writeline("   \<\/record\>");
            }
if (A_S_Cath_S==false)
        {
        s.writeline("");
        }
        else
            {
            s.writeline("   \<record\>");
            s.writeline("       \<School\_Name\>All Saints Catholic School\<\/School\_Name\>");
            s.writeline("       \<School\_Seq\>002\<\/School\_Seq\>");
            s.writeline("       \<Delay\>" + A_S_Cath_S_selected + "\<\/Delay\>");
            s.writeline("       \<Other\>" + A_S_Cath_S_other + "\<\/Other\>");
            s.writeline("   \<\/record\>");
            }
            s.writeline("\<\/School\_data\>");
    s.Close();
  } 
  catch(err)
  {
   var strErr = 'Error:';
   strErr += '\nNumber:' + err.number;
   strErr += '\nDescription:' + err.description;
   document.write(strErr);
  }
}
</script>

HTML:

<h1>School Closures</h1>
<br />
<form>
<table width="900" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td align="left" valign="middle"><input type="checkbox" name="A_Bright_Beginning_Preschool" id="A_Bright_Beginning_Preschool" /></td>
    <td align="left" valign="middle">A Bright Beginning Preschool</td>
    <td align="left" valign="middle"><select name="A_Bright_Beginning_PreschoolSelected" id="A_Bright_Beginning_PreschoolSelected">
        <option value="" selected="selected"></option>
        <option value="1 Hour Late">1 Hour Late</option>
        <option value="2 Hours Late">2 Hours Late</option>
        <option value="3 Hours Late">3 Hours Late</option>
        <option value="4 Hours Late">4 Hours Late</option>
        <option value="No School">No School</option>
    </select></td>
    <td align="left" valign="middle"><input name="A_Bright_Beginning_PreschoolOther" type="text" id="A_Bright_Beginning_PreschoolOther" size="80" /></td>
  </tr>
  <tr>
    <td align="left" valign="middle"><input type="checkbox" name="All_Saints_Catholic_School" id="All_Saints_Catholic_School" /></td>
    <td align="left" valign="middle">All Saints Catholic School</td>
    <td align="left" valign="middle"><select name="All_Saints_Catholic_SchoolSelected" id="All_Saints_Catholic_SchoolSelected">
        <option value="" selected="selected"></option>
        <option value="1 Hour Late">1 Hour Late</option>
        <option value="2 Hours Late">2 Hours Late</option>
        <option value="3 Hours Late">3 Hours Late</option>
        <option value="4 Hours Late">4 Hours Late</option>
        <option value="No School">No School</option>
    </select></td>
    <td align="left" valign="middle"><input name="All_Saints_Catholic_SchoolOther" type="text" id="All_Saints_Catholic_SchoolOther" size="80" /></td>
  </tr>
</table>

1 Ответ

0 голосов
/ 07 ноября 2018

Вы каждый раз создаете файл XML в своем коде WriteToFile?

s = fso.CreateTextFile ("xml_output / sc_output.xml", true);

Это перезапишет ранее созданный XML-файл при вызове. Вам понадобится некоторая логика в вашем коде, чтобы проверить, существует ли файл XML, и если да, прочитайте соответствующий контент и заполните его полями HTML.

В терминах псевдо (-ish) -кода:

if not fso.fileExists("output.xml") then
Set outFILE = fso.createTextFile("output.xml")
else
Set inFILE = fso.openTextFile("output.xml"), 1) ' ForReading
rawXML = inFILE.ReadAll
inFILE.Close
end if

.. в vbscript есть несколько инструментов обработки XML (создайте объект XML и прочитайте его, или обработайте определенные элементы и т. Д.). Но сначала нужно разобраться с проблемой создания файла.

...