12:09 Firefox3 OpenSearchのsuggest機能

const Cc = Components.classes;
const Ci = Components.interfaces;
const responseType = 'application/x-suggestion+json';
var searchWord = 'hogehoge'
var ss = Cc['@mozilla.org/browser/search-searvice;1']
         .getService(Ci.nsIBrowserSearchService);
var googleSE = ss.getEngineByAlias('google'); //nsISearchEngine
if (googleSE.supportsResponseType(responseType)) {
    var submission = googleSE.getSubmission(searchWord, responseType); //nsISearchSubmission
    var uri = submission.uri; //nsIURI
    var uri_spec = uri.asciiSpec; //'http://suggestqueries.google.com/complete/search?output=firefox&client=firefox&hl=ja&qu=hogehoge
    // ....;
}

06:32 XPCOM OS のシステム情報を得る

Class
@mozilla.org/system-info;1
Interface
nsIPropertyBag2
const Cc = Components.classes;
const Ci = Components.interfaces;
var sysInfo = Cc['@mozilla.org/system-info;1'].getService(Ci.nsIPropertyBag2);
var pratform = sysInfo.getProperty('name');

Properties and Example

  • name
    • Windows_NT
    • Mac OS X
    • Linux
  • version
    • 5.1
  • arch
    • x86
  • host
    • femo

06:01 XPCOM OS の環境変数を得る/設定する

Class
@mozilla.org/process/environment;1
Interface
nsIEnvironment
const Cc = Components.classes;
const Ci = Components.interfaces;
var env = Cc['@mozilla.org/process/environment;1'].getService(Ci.nsIEnvironment);
var path = env.get('path');

Method

Boolean exists (String aName)
Check the existence of an environment variable.
環境変数が存在するかどうか判定する
String get (String aName)
returns the value of the env varible. An empty string will be returned when hte env variable dose not exist or when the value itself is an empty string - please use exists() to probe whether the env variable exists or not.
環境変数の値を返す。環境変数が存在しない、または、空文字列の場合、空文字列が返る。exists()メソッドを使って事前に判定してください。
String set (String aName, String aValue)
Set the value of an environment variable.
環境変数を設定する

16:56 Thunderbird のフィルター・リストを得る

  1. 現在選択されているフォルダを得る
  2. そのフォルダのルートからURIを得る
  3. RDFサービスからフィルタ・リストを得る
const Cc = Components.classes;
const Ci = Components.interfaces;
var folder = GetFirstSelectedMsgFolder();
if ( folder && folder.server.type == 'none' && folder.server.isDeferredTo ) {
  var defaultServer = accountManager.defaultAccount.incomingServer;
  if ( defaultServer.rootMsgFolder == folder.server.rootFolder ) {
    folder = defaultServer.rootFolder;
  }
}
var uri;
try {
  var rootFolder = folder.server.rootFolder;
  if ( rootFolder.isServer && rootFolder.server.canHaveFilters ) {
    uri = (rootFolder.server.type == 'nntp') ? folder.URI : rootFolder.URI;
  }
} catch (ex) { Components.utils.reportError(ex); }
var rdf = Cc['@mozilla.org/rdf/rdf-service;1'].getService(Ci.nsIRDFService);
var filterList = rdf.GerResource(uri).GerDelegate('filter',Ci.nsIMsgFilterList);

16:36 現在開いているWindowの参照

const Cc = Components.classes;
const Ci = Components.interfaces;
var windowType = 'mail:3pane'; // 'navigator:browser','composer:html'
var windoManager = Cc['@mozilla.org/appshell/window-mediator;1'].getService(Ci.nsIWindowMediator);

/**
 * get most recent window
 * When the argument is null, return most recent window in all
 */
var mostRecentWindow = windowManager.getMostRecentWindow( windowType );

/**
 * get each window
 */
var windows = windowManager.getEnumerator( windowType );
var target;
while ( windows.hasMoreElements() ) {
  target = targets.getNext();
  target = target.QueryInterface(Ci.nsIDOMWindowInternal);
}

< 1 2 >