Join MDN and developers like you at Mozilla's View Source conference, 12-14 September in Berlin, Germany. Learn more at https://viewsourceconf.org

On page load

この記事はブラウザやメールで新しいページを読み込んだときにコードを実行したい XUL/JavaScript 開発者のためのものです。もし、コードをページを読み込んでいる時やタブを切り替えた時など、さらに高度な条件下で実行したいときは、 Progress Listeners を見てください。

Progress listeners により、拡張機能にドキュメントの表示やタブ切り替えのイベントを知らせることができます。 Progress listeners は nsIWebProgressListener interface を実行します。

オーバーレイの作成

まず、以下のXULドキュメントの一つ(あるいはあなたが対象としているアプリケーションによってはもっと)への overlay を作成します。

Application URI to overlay
Firefox chrome://browser/content/browser.xul
Thunderbird chrome://messenger/content/messenger.xul
Navigator from Seamonkey chrome://navigator/content/navigator.xul

スクリプトの記述

overlay するスクリプトに、このコードを加えることで、 load イベントリスナーを appcontent element (ブラウザ) または messagepane (メール) に追加します。

window.addEventListener("load", function() { myExtension.init(); }, false);

var myExtension = {
  init: function() {
    var appcontent = document.getElementById("appcontent");   // ブラウザ
    if(appcontent)
      appcontent.addEventListener("DOMContentLoaded", myExtension.onPageLoad, true);
    var messagepane = document.getElementById("messagepane"); // メール
    if(messagepane)
      messagepane.addEventListener("load", function () { myExtension.onPageLoad(); }, true);
  },

  onPageLoad: function(aEvent) {
    var doc = aEvent.originalTarget; // doc は "onload" event を起こしたドキュメント
    // 読み込んだページに対する動作。
    // doc.location は Location オブジェクト (このページの一番下のリンクを見てください。).
    // 特定のページでだけコードを実行するようにさせることができます。
    if(doc.location.href.search("forum") > -1)
      alert("a forum page is loaded");
  }
}

現在の Firefox は onPageLoad function をドキュメントだけでなく、 xul:images (tabbrowser の favicons) に対しても実行します。もしドキュメントのときだけ実行したいなら、 aEvent.originalTarget.nodeName == "#document"  の条件を使います.

拡張機能を初めて使うときやアップデートしたときにコードを実行する

browser に overlay するスクリプトに、以下のコードを加えて load イベントリスナーを追加します。

var Prefs = Components.classes["@mozilla.org/preferences-service;1"]
                   .getService(Components.interfaces.nsIPrefService);
Prefs = Prefs.getBranch("extensions.my_extension_name.");


var Overlay = {
  init: function(){
    var ver = -1, firstrun = true;

    var gExtensionManager = Components.classes["@mozilla.org/extensions/manager;1"]
                            .getService(Components.interfaces.nsIExtensionManager);
    var current = gExtensionManager.getItemForID("extension@guid.net").version;
    //バージョン番号の取得
    //"extension@guid.net" はあなたの拡張機能の GUID に置き換える必要があります。
		
    try{
	ver = Prefs.getCharPref("version");
	firstrun = Prefs.getBoolPref("firstrun");
    }catch(e){
      //nothing
    }finally{
      if (firstrun){
        Prefs.setBoolPref("firstrun",false);
        Prefs.setCharPref("version",current);
	
        // ここに初めて実行したとき用のコードを挿入します。        

        // 下の例では新しいタブを開いてページを読み込んでいます。
        // ミニチュートリアルを読み込むのに使っています。
        window.setTimeout(function(){
          gBrowser.selectedTab = gBrowser.addTab("about:mozilla");
        }, 1500); //Firefox 2 の修正 - タブは時間が経過すると閉じます。
				
      }		
      
      if (ver!=current && !firstrun){ // !firstrun によりこのセクションは拡張機能を初めて使うときは実行されません。
        Prefs.setCharPref("version",current);
        
        // バージョンが異なるとき、すなわちアップグレードしたときに実行するコードを挿入します。
      }
    }
    window.removeEventListener("load",function(){ Overlay.init(); },true);
  }
};


window.addEventListener("load",function(){ Overlay.init(); },true);

参照

  

 

Quick Lookup:

ドキュメントのタグと貢献者

 このページの貢献者: masahal
 最終更新者: masahal,