日向夏特殊応援部隊

俺様向けメモ

nsIWindowWatcherを使って全てのダイアログを捕捉する

相当ニッチな用途ですけど、

  • window.alert()
  • window.confirm()
  • window.open();
  • window.openDialog();
  • window.print();

などなど、特別なダイアログが開いた事を検出するにはnsIWindowWatcherを使うと出来るようです。

var wwatch = Cc["@mozilla.org/embedcomp/window-watcher;1"].getService(Ci.nsIWindowWatcher);
var observer = {
  observe: function(aSubject, aTopic, aData) {
    if (aTopic != "domwindowopend")
      return;

    aSubject.addEventListener("load", function() {
      aSubject.close();
    }, false);
  }
};

wwatch.registerNotification(observer);

のようにobserverを作って登録してあげると、alert等のダイアログが全てclose()されます。

ちなみに、

aSubject
ChromeWindow or Window
aTopic
イベント名
aData
恐らくnull

のようにobserverに渡される模様。

例えば、もう余り見ないけどalertとかのブラクラとかはこの手の記述である程度防げるんじゃないかなーと。

参考にしたのは、

辺りです。