Code snippets:Miscellaneous
出典: MDC
このページは、小さく、見ればすぐわかるようなコード片を載せています。
目次 |
[編集] ウェブページをローカルファイルに保存する
次のコードはユーザにファイル名を入力するように聞いてきませんが、それは ファイルピッカーコンポーネント を使用することで可能です。
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
file.initWithPath("C:\\filename.html");
var wbp = Components.classes['@mozilla.org/embedding/browser/nsWebBrowserPersist;1']
.createInstance(Components.interfaces.nsIWebBrowserPersist);
wbp.saveDocument(content.document, file, null, null, null, null);
[編集] オペレーティングシステムを検出する
// Windows XP、2000、NT では WINNT が返る Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULRuntime).OS;
返る値のリストは LXR (http://lxr.mozilla.org/mozilla/source/configure.in#910) で確認できます。
[編集] ホストアプリケーションとそのバージョンを検出する
var info = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULAppInfo); // このコードを実行しているアプリケーションの名前を取得する info.name; // Firefox では "Firefox" が返る info.version; // Firefox バージョン 2.0.0.1 では "2.0.0.1" が返る
[編集] 拡張機能の install.rdf に記載されたその拡張機能のバージョンを読み出す
var em = Components.classes["@mozilla.org/extensions/manager;1"]
.getService(Components.interfaces.nsIExtensionManager);
// extension-guid をバージョンを読み出したい拡張機能の GUID に変更すること
// 例えば FoxyProxy の場合は foxyproxy@eric.h.jung
var addon = em.getItemForID("<extension-guid>");
var version = addon.version;
[編集] 入力ストリームから出力ストリームにコピーする
// istream は nsIInputStream、ostream は nsIOutputStream
// 出力ストリームを機能させるにはバッファリングする必要がある
var bostream = Components.classes["@mozilla.org/network/buffered-output-stream;1"]
.createInstance(Components.interfaces.nsIBufferedOutputStream);
bostream.init(ostream, 0x8000);
// 入力ストリームから読み込むためにストリームポンプとストリームリスナを用意する
var pump = Components.classes["@mozilla.org/network/input-stream-pump;1"]
.createInstance(Components.interfaces.nsIInputStreamPump);
pump.init(istream, -1, -1, 0, 0, true);
/* ファイルを閉じるべきタイミングを知るために独自のオブザーバが必要 */
var observer = {
onStartRequest: function(aRequest, aContext) {},
onStopRequest: function(aRequest, aContext, aStatusCode) {
bostream.close();
}
};
// 出力ストリームに書き出すためにシンプルストリームリスナを用意する
var listener = Components.classes["@mozilla.org/network/simple-stream-listener;1"]
.createInstance(Components.interfaces.nsISimpleStreamListener);
listener.init(bostream, observer);
// コピー開始
pump.asyncRead(listener, null);
[編集] Firefox/Thunderbird を再起動する
var nsIAppStartup = Components.interfaces.nsIAppStartup;
Components.classes["@mozilla.org/toolkit/app-startup;1"].getService(nsIAppStartup)
.quit(nsIAppStartup.eForceQuit | nsIAppStartup.eRestart);
[編集] マウス、キーイベントをシミュレートする
nsIDOMWindowUtils インタフェースにはマウスイベントやキーイベントをシミュレートするための有用なメソッドがあります。
Firefox 3 / Gecko 1.9 の新機能
var req = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor);
var utils = req.getInterface(Components.interfaces.nsIDOMWindowUtils);
utils.sendMouseEvent("mousedown", 10, 10, 0, 1, 0);
utils.sendMouseEvent("mouseup", 10, 10, 0, 1, 0);