JavaScriptからファイルシステムへのアクセスとか

JavaScriptからローカルのファイルを読んだり書いたりしたい。
ぜんぜんまとまってないし理解もしてないけど調べたものをメモ。
ローカルでJSと言えばTiddlyWikiが思い浮かぶのでソースチェック。
ieLoad/SaveFileとかmozillaLoad/SaveFileとかのところ。ieXXXの方はWSHを使用。mozillaXXXの方はよくわからないのでもっと調べる。

// Returns null if it can't do it, false if there's an error, true if it saved OK
function mozillaSaveFile(filePath, content)
{
	if(window.Components)
		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);
			out.write(content, content.length);
			out.flush();
			out.close();
			return(true);
			}
		catch(e)
			{
			//alert("Exception while attempting to save\n\n" + e);
			return(false);
			}
	return(null);
}

まずこれ。

netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");

MozillaJavaScriptにはPackagesというオブジェクトがあってnetscapeというのはそれのプロパティらしい。グローバルのnetscapeはそれのシノニム。
ほかにもjavaとsunがある。Javaのパッケージなのかね。よくわからん。
Packages - Archive of obsolete content | MDN
Bypassing Security Restrictions and Signing Code - Archive of obsolete content | MDN
関係ないけどjava.awtでウィンドウ作れたりしてびびった。そして開いたウィンドウを閉じれなくて困った。
つぎこれ。

var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);

MozillaにはXPCOMというWindowsのCOMみたいなオブジェクトモデルがあって、それをJavaScriptから使うらしく、XPCONNECTとか呼ばれてるらしい。
http://www.mozilla-japan.org/projects/xpcom/
http://www.mozilla-japan.org/catalog/architecture/xpconnect/
何となくわかったような気がする。
というかこれだけわかればいいか。
ファイルの読み書きができればいーし。
あとでソース書いてみる。

    • -

Thanks to:
TiddlyWiki — a non-linear personal web notebook