Create  Edit  Diff  XUL Wiki  Index  Search  Changes  History  Source  RSS  wikifarm  Login

グローバルなイベント通知

ウィンドウをまたいだイベントの通知と取得

通常、イベントの通知と取得には、XUL要素のイベントハンドラ属性や addEventListener 等を使いますが、これらの方法はひとつのウィンドウ内に限られます。

ウィンドウA のボタンが押されたことを、ウィンドウB で取得したいという状況は多くあります。そのような場合は上記の方法が使えません。 代わりに nsIObserverService を使ってイベントの通知と取得を行います。

ウィンドウA (イベントの通知)

ボタンが押されたら doButtonCommand を実行

<button label="ボタン" oncommand="doButtonCommand(event)"/>

doButtonCommand では、observerService を使ってイベントを通知。 その際通知先に event オブジェクトを送る

function doButtonCommand(aEvent){
  var observerService = Components.classes["@mozilla.org/observer-service;1"]
                  .getService(Components.interfaces.nsIObserverService);
  observerService.notifyObservers(aEvent, "on-button-command", "");
}

ウィンドウB (イベントの取得)

イベント取得時に呼ばれる observe メソッドを持ったオブジェクトの作成

var myObserver= {
  observe:function(aSubject, aTopic, aData){
    if(aTopic == "on-button-command"){
      alert(aSubject.originalTarget.label);
    }
  }
}

myObserverを オブサーバとして登録

var observerService = Components.classes["@mozilla.org/observer-service;1"]
               .getService(Components.interfaces.nsIObserverService);
observerService.addObserver(myObserver, "on-button-command", false);

登録を解除は removeObserver を使う

observerService.removeObserver(myObserver, "on-button-command", false);

stromlieferanten vergleich Saarland gaslieferanten vergleich Nordrhein-Westfalen-NRW strom gas tarifrechner Thüringen gas strom preiswert gaskostenvergleich

Last modified:2004/12/01 01:45:49
Keyword(s):
References:[XUL Wiki]