Visit Mozilla.org

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);