XPCOMの利用例

ユーザー設定

ユーザー設定にアクセスするための、nsIPrefBranchを取得できます。

var prefs = Components.classes[ '@mozilla.org/preferences-service;1' ]
    .getService( Components.interfaces.nsIPrefBranch );

セッション

セッションの保存や復元ができます。

getBrowserState()
setWindowState( aWindow, aState, aOverwrite )

Cookie

ファイル操作

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

バイナリファイル

テキストファイル

通信

POST

Browser.loadURIWithFlags()メソッド

loadURIWithFlags(
    aURI,
    aFlags,
    aReferrerURI,
    aCharset,
    aPostData
    )
loadURIWithFlags - Mozilla | MDN

サンプルコード

指定URLへPOSTでリクエストし、そのレスポンスをブラウザに読み込みます。

var Cc = Components.classes;
var Ci = Components.interfaces;

var dataString = 'name1=data1&name2=data2';


var stringStream = Cc[ '@mozilla.org/io/string-input-stream;1' ]
    .createInstance( Ci.nsIStringInputStream );
stringStream.data = dataString;

var aPostData = Cc[ '@mozilla.org/network/mime-input-stream;1' ]
    .createInstance( Ci.nsIMIMEInputStream );

aPostData.addHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
aPostData.addContentLength = true;
aPostData.setData( stringStream );

var aURI = 'http://example.com/';
var aFlags = 0;
var aReferrer = null;
var aCharset = 'UTF-8';
gBrowser.loadURIWithFlags( aURI, aFlags, aReferrer, aCharset, aPostData );

ブラウザに表示するのではなくレスポンスを直接受け取りたいならば、XMLHttpRequestを用います。

サウンド

音を鳴らせます。

var sound = Components.classes[ '@mozilla.org/sound;1' ]
    .createInstance( Components.interfaces.nsISound );

// Beep音を鳴らす
sound.beep();

Web操作

ウィンドウ操作

ウィンドウを取得できます。

var wm = Components.classes[ '@mozilla.org/appshell/window-mediator;1' ]
    .getService( Components.interfaces.nsIWindowMediator );

ダイアログの表示 (nsIPromptService)

nsIPromptServiceでは、window.alert()やwindow.confirm()のようなダイアログを表示できます。Example code - nsIPromptService - Mozilla | MDN

下表に示すような、表示形式の異なるメソッドがあります。

メソッド 追加要素
  OK キャンセル 任意のボタン チェックボックス 入力欄 パスワードの入力欄 リストボックス
alert()            
alertCheck()          
confirm()          
confirmCheck()        
confirmEx() (オプション)      
prompt()       (オプション)    
promptUsernameAndPassword()       (オプション)  
promptPassword()       (オプション)    
select()            
Methods - nsIPromptService - Mozilla | MDN

alert()

void alert(
    in nsIDOMWindow aParent, // ダイアログの親ウィンドウ。アクティブなウィンドウをそれとするならば、nullを指定する。
    in wstring aDialogTitle, // ダイアログのタイトル
    in wstring aText         // ダイアログの本文
    );
alert() - nsIPromptService - Mozilla | MDN

これはwindow.alert()に相当するメソッドですが、タイトルを指定できる点が異なります。アドオンではwindow.alert()よりも、こちらを使用することが推奨されています。

nsIPromptService.alert() Window.alert()
var prompt = Components.classes[ '@mozilla.org/embedcomp/prompt-service;1' ]
    .getService(Components.interfaces.nsIPromptService);

prompt.alert( null, 'Title', 'SAMPLE' );

alertCheck()

void alertCheck(
    in nsIDOMWindow aParent,  //
    in wstring aDialogTitle,  //
    in wstring aText,         //
    in wstring aCheckMsg,     //
    inout boolean aCheckState //
    );
alertCheck() - nsIPromptService - Mozilla | MDN

confirm()

boolean confirm(
    in nsIDOMWindow aParent, //
    in wstring aDialogTitle, //
    in wstring aText         //
    );
confirm() - nsIPromptService - Mozilla | MDN

通知の表示 (nsIAlertsService)

nsIAlertsServiceでは、ウィンドウ下部に次のような通知ウィンドウを表示できます。

try
{
    var alertsService = Components.classes[ '@mozilla.org/alerts-service;' ]
        .getService( Components.interfaces.nsIAlertsService );

    alertsService.showAlertNotification( null, 'Title', 'text' );
}
catch( e ) {}

このshowAlertNotification()は、Mac OS XのFirefox 22より前では例外を発生するため、tryで囲みます。

void showAlertNotification(
    in AString imageUrl,
    in AString title,
    in AString text,
    in boolean textClickable,
    in AString cookie,
    in nsIObserver alertListener,
    in AString name,
    in AString dir,
    in AString lang
    );
showAlertNotification() - nsIAlertsService - Mozilla | MDN

クリップボード

クリップボードを使用した、切り取り、コピー、貼り付けができます。

@mozilla.org/widget/clipboard;1
@mozilla.org/widget/clipboardhelper;1

レジストリ

Windowsのレジストリへアクセスできます。

検索

rangefind

@mozilla.org/embedcomp/rangefind;1

これの利用例が、Firefoxのソース\toolkit\modules\Finder.jsmのFinder._highlight()にあります。

Firefoxアドオンの情報サイトから、まとめて検索