2011-02-08 6 views
0

私は個人的な消費と練習のために小さなエクステンションに取り組んでいます。私がしたいことは、Firefoxがモーダルダイアログを使用し始めるたびにいくつかの情報を提供することです。これは一般的には怒られていることは分かっていますが、これは主にノウハウのためです。私はいくつかのことについていくつかの質問があります---私はそれを行うより良い方法があるように感じます。親切にあなたの知恵を共有する:拡張ダイアログ:セッション間情報、「プリロード」イベント、および起動ダイアログのセンターを設定する方法は?

  1. 私は小さなダイアログXULを作成している、と私は、メインウィンドウのloadイベントに登録されたイベントリスナーを持っています。実際にダイアログを表示するには、私が使用:

    window.openDialog("chrome://myext/content/prompt.xul", "dialogname", 
        "chrome,dialog,modal,centerscreen,resizable", params).focus(); 
    

問題1:私は起動ダイアログが中央の画面上にあるように取得することはできません(私はcenterscreenが有効になっている場合でも)、それがトップ左を開始します - それは真ん中でそれを持っていいです--- Firefoxの起動時のパスワード要求のようなものです。それをどうすれば実現できますか?

  1. Firefoxのインスタンスが複数存在する場合でも、モーダルウィンドウをセッションごとに1回開くようにしたいと思います。私が達成したことは、ダイアログが実行されたら、拡張設定を設定し、新しいウィンドウの「ロード」イベントで別のダイアログを開く前にチェックします。

問題2:私は何とか前のセッションから設定された優先順位を持っていないことを確認するために、私はこれが最初のウィンドウ開かれているかどうかをチェックしてみてください、そしてもしそうなら、私は設定をリセット。ちょうど安全であるように、私は最後のウィンドウのアンロードイベントでそれらをリセットします。最初/最後の負荷を検出し、アンロードするには、私はnsIWindowWatcherサービスを使用し、私は戻っ列挙子通過できるかどうかを確認:

var ww = Components.classes["@mozilla.org/embedcomp/window-watcher;1"]          
        .getService(Components.interfaces.nsIWindowWatcher); 
var en = ww.getWindowEnumerator(); 
var win1 = en.getNext(); 
//if there is no more en.getNext(), then this is the 1st window 

をなし、これを行うには良い方法がなければなりませんか?セッションごとに1回だけ発生するイベント(ウィンドウごとではない)

  1. ダイアログボックスがキャンセルされた場合は、Firefoxを終了します。今、私はダイアログのキャンセルボタンに関連付けられた簡単なwindow.close()によってそれを達成します。ただし、ページの読み込みが完了した後に元の読み込み(モーダルダイアログをトリガした)が呼び出されたため、閉じる前にホームページを少し覗いて見ることができます。これはwindow.close()です。これはエレガントではありません。 「before_page_load」に類似したイベントはありますか?この目標を達成するための適切な方法は何か。

もう一度、これは主に個人用ですので、スタートアップモーダルダイアログのユーザビリティファクタを無視してください。

答えて

0

メインウィンドウが開く前に発生するfinal-ui-startup通知を監視する必要があります。これを行うには、profile-after-change通知を監視するコンポーネントを登録し、その通知中に自分自身を追加してfinal-ui-startup通知を確認します。その後コンポーネントがその通知を受け取ると、モーダルダイアログを開き、必要に応じてアプリケーションを終了することができます。