2017-11-09 5 views
0

私はセッション間でいくつかのデータを保持するHTAを作ろうとしたいと思います。ファイルがあるコンピュータから別のコンピュータに移動する可能性があるので、私はクッキーに依存したくないので、データを保存するためのリモートサーバがないでしょう。したがって、私の希望は、vbscriptのようなスクリプトを使って、 HTA自体にデータを保存するので、次回アプリケーションを実行するときに、すでに最新の情報が保持されます。HTA自己変更コード?

私はおそらく、アプリケーションの初期化に使用される変数宣言のリストとしてコード内の行を捧げています。これらの変数の現在の状態を読み込み、特にこれらの行のhtaファイルのソースコードを編集し、その値を現在の値と置き換える何らかの「保存」ボタンがアプリケーションにあります。

HTAファイルは基本的に異なる拡張子を持つ単なるテキストファイルなので、他のファイルと同じようにHTA自体を編集する方法があると思いますが、実際にはどのように行うのかわかりませんが、変数を格納するコード行を分離してファイル全体をメモリに読み込まずに編集し、何かを保存するたびに全体を保存する方法...私は、私はXMLやCSVのような外部ファイルに依存してセッション間の設定を保存したくないので、データをHTAに埋め込むことができるようにしたいと考えています。

答えて

0

FileSystemObjectをご覧ください。あなたはVBScriptを使用している場合、あなたはが

  • CreateTextFileのファイルに新しい内容を書くに変更したい行を変更し、ファイル
  • を読む

    • オープンにOpenTextFile
    • とHTAファイルが必要になります(上書きをTrueに設定)

    JavaScriptを使用する場合、手順は同じですが、方法は少し異なります。

  • +0

    私はまだ試していないが、私は確かにしたかった...私はそれが既に開いている間、HTAファイルを変更しようとすると、それができるようになります保存するか、ファイルがロックされていることが表示されますか? IEはファイルを読み取り専用で開き、メモリに最初にロードされたときを除いてファイルをロックしないので、既に開いている間は安全にHTAに保存することができますが、うまく動作しないコードを書く前に必ず確認してください。 – Ceetch

    1

    実際にHTAファイルは、解釈されたコードなので実行中に変更することができます。ブラウザで表示中にHTMLファイルを変更するのと同じ方法です。

    しかし、私は1つのファイルにすべてを保持しなければならないいくつかの説得力のある理由がない限り、そうしません。 HTAへの書き込みに問題がある場合は、空のファイルになり、すべてが失われます。したがって、プレーンテキストファイルを使用してデータを保存し、そのデータをHTAに組み込むことをお勧めします。

    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>