HTA自修改代码?

时间:2017-11-09 17:24:12

标签: vbscript hta

我想尝试制作一个在会话之间保存一些数据的HTA。该文件可能会从一台计算机移动到另一台计算机,所以我不想依赖cookie,也不会有一些远程服务器来保存数据,所以我希望找到一种方法来使用像vbscript这样的脚本来编写将数据保存回HTA本身,以便下次运行应用程序时,它已经拥有最新信息。

我可能会做的是在代码中添加一行代码作为将用于初始化应用程序的变量声明列表。应用程序中会有某种“保存”按钮,它将读取这些变量的当前状态并编辑hta文件的源代码,特别是在那些行上,并用当前值的任何值替换值。

由于HTA文件本质上只是一个具有不同扩展名的文本文件,我认为有一种方法让HTA编辑自己像任何其他文件一样...但我实际上并不知道如何做,或者如何隔离变量将驻留的代码行并编辑它们而不必将整个文件加载到内存中并在每次我想保存的东西时保存整个内容...我想保持完全独立的东西,所以我不想依赖XML或CSV之类的外部文件在会话之间存储设置,所以我希望能够将数据嵌入到HTA中。

2 个答案:

答案 0 :(得分:1)

您确实可以在HTA文件运行时对其进行修改,因为它是已解释的代码。您在浏览器中查看时也可以修改HTML文件。

但是,我不这样做,除非有一些令人信服的理由你必须将所有内容保存在1个文件中。 如果写入HTA时出现问题,您将最终得到一个空白文件并丢失所有内容。因此,我建议使用纯文本文件来存储您的数据并将其包含在您的HTA中。< / p>

<强> MyApp.hta

<!doctype html>
<HTA:APPLICATION
  APPLICATIONNAME="MyApp"
  SINGLEINSTANCE="yes"
  CONTEXTMENU="no"
  ICON=""
  ID="HTA"
  INNERBORDER="no"
  NAVIGABLE="no"
  SCROLL="yes"
  SHOWINTASKBAR="yes"
  VERSION="0.0.1"
/>
<html lang="en-US">
<head>
  <meta charset="UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=9" />
  <title>MyApp</title>
  <style type="text/css">
    body { font-family: Calibri, Arial; font-size: 20px; }
    label { font-weight: bold; }
    .settings__container { position: relative; height: 200px; border: 2px dashed #ccc; overflow: hidden; padding-right: 2px; }
    #settings { width: 100%; height: 100%; border: 0; }
  </style>
</head>
<body>
  <label>Settings:</label>
  <div class="settings__container">
    <textarea id="settings"></textarea>
  </div>
  <button id="save-settings__button">Save Now</button>
  <script type="text/javascript">
    (function() {
      var settingsElement = document.getElementById('settings'),
          settingsFile = "MyApp.settings.txt",
          io = new ActiveXObject('Scripting.FileSystemObject');

      function loadSettings() {
        try {
          var file = io.OpenTextFile(settingsFile, 1),
              data = file.ReadAll();

          file.Close();
          settingsElement.value = data;
        } catch(e) {
          // Failed to load settings; settings file may not exist yet.
        }
      }

      function saveSettings(data) {
        var file = io.OpenTextFile(settingsFile, 2, true);
        file.Write(data);
        file.Close();
      }

      // Assuming IE9+
      document.getElementById('save-settings__button').addEventListener('click', function(e) {
        saveSettings(settingsElement.value);
      });

      // Load the settings file
      addEventListener('load', function(e) {
        loadSettings();
      });

      // Save the settings on exit
      addEventListener('unload', function(e) {
        saveSettings(settingsElement.value);
      });
    })();
  </script>
</body>
</html>

答案 1 :(得分:0)

查看FileSystemObject。如果您正在使用vbscript,则需要

  • 使用OpenTextFile
  • 打开HTA文件
  • 阅读文件
  • 修改要更改的行
  • 使用CreateTextFile(覆盖设置为True)
  • 将新内容写入文件

对于使用Javascript的程序是相同的,方法略有不同。