ローカルファイルへの書き込み(その2)

できたー!!!
 
というか、発見したー!!
かめだあきひろさん、ありがとうございました!
 
いやね、他にもたくさんサンプルを挙げてくれているサイトやブログさんはあるのですよ。本家とかね。
でも、自分の環境でやるとうまく動いてくれない。。
 
とりあえずこのコードをベースにして、他のサンプルコードだと何がダメだったのかも調査してみよう。
 
さて、ローカルファイルへの書き込みですが、「読み込み」がjQueryで提供されてるなら「書き込み」もあるだろと思ってたんだけど、
実際にはそういうインタフェースは見つけられなかった。(ソースコードを調べるまでしたわけじゃないのですっごくヌルい調査だったんだけど)
あっても良さそうなんだけどなぁ。

では、動作確認できたコードを晒しますが、その前に注意事項を。


★注意★
動作確認:
  Linux(Ubuntu 9.10)/Firefox 3.5.8。WindowsFirefoxは未確認。
要修正箇所:
  ボタンのonclickイベントで、定義したwriteToFile関数の第1引数に渡している'★★★★★'は、
  自分が出力したいローカルファイルの「フルパス」を記述してください。
  フルパスでなくとも出力できるかどうかは確認していませんが、「フルパスなら」出力できました。
では実際のコードです。↓↓↓

<html>
  <head>
    <script type="text/javascript">
      function writeToFile (filePath, content) {
        try {
          netscape.security.PrivilegeManager.enablePrivilege ('UniversalXPConnect');
          var file = Components.classes["@mozilla.org/file/local;1"].createInstance (Components.interfaces.nsILocalFile);
          file.initWithPath (filePath);
          if (! file.exists ()) file.create (0, 0664);
          var out = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance (Components.interfaces.nsIFileOutputStream);
          out.init (file, 0x20 | 0x02, 00004, null);
          var charset = "UTF-8";
          var conv = Components.classes["\@mozilla.org/intl/converter-output-stream;1"].createInstance(Components.interfaces.nsIConverterOutputStream);
          conv.init(out, charset, 0, 0x0000);
          conv.writeString(content);
          conv.close();   
        } catch (e) {
          alert(e);
        }
      }
    </script>
  </head>
  <body>
    <input type="button" value="書き込み!"  onclick="writeToFile('★★★★★', 'hogefuga');"/>
  </body>
</html>

よぉ〜し!これで念願の「HTMLとjavascriptでツールを作る」スタートラインに立てたぜ!
マジやる気でてきましたよ。

でもちょっとほったらかしにしすぎたから、今日はSICPやろうっと。