2012-02-12 2 views
0

現在、起動時に開いたFirefoxの拡張子を選択することができます。私のJSコードは次のようになります。"sessionstore-state-read"オブザーバが動作しない

編集を:それはで正常に動作

にchrome.manifest

component {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} components/myextension.js 
contract @example.com/MyExtension;1 {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} 
category profile-after-change MyExtension @example.com/MyExtension;1 

コンポーネント/ myextension.js

Components.utils.import("resource://gre/modules/XPCOMUtils.jsm"); 
const CI = Components.interfaces, CC = Components.classes, CR = Components.results; 

// class declaration 
function MyExtension() {} 

MyExtension.prototype = { 

    classDescription: "My Firefox Extension", 
    classID:   Components.ID("{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}"), 
    contractID:  "@example.com/MyExtension;1", 
    QueryInterface: XPCOMUtils.generateQI([CI.nsIObserver]), 

    // add to category manager 
    _xpcom_categories: [{ 
     category: "profile-after-change" 
    }], 

    observe: function(aSubject, aTopic, aData) 
    { 
     var obs = CC["@mozilla.org/observer-service;1"].getService(CI.nsIObserverService); 

     switch (aTopic) 
     { 
      case "profile-after-change": 
       obs.addObserver(this, "sessionstore-state-read", false); 
       break; 
      case "sessionstore-state-read": 
       aSubject.QueryInterface(CI.nsISupportsString); 
       let newData = { windows: [{ tabs: [{ entries: [{ 
        url: "about:sessionrestore", 
        formdata: { "#sessionData": aSubject.data } 
       }] }] }] }; 
       aSubject.data = JSON.stringify(newData); 
       break; 
      default: 
       throw Components.Exception("Unknown topic: " + aTopic); 
     } 
    } 
}; 

if (XPCOMUtils.generateNSGetFactory) 
    var NSGetFactory = XPCOMUtils.generateNSGetFactory([EmbarrassedObserver]); 
else 
    var NSGetModule = XPCOMUtils.generateNSGetModule([EmbarrassedObserver]); 

作業バージョンに更新されたコードをsessionstore-state-write(コメント行)ですが、私はsessionstore-state-readイベントでそれをやりたいのですが、whzを編集したくありませんディスクに書き込みます。問題は、私がreadイベントに変更すると、私のオブザーバーが動作しなくなることです。私の推測では、オブザーバーが遅すぎる(セッションが読み込まれた後に)登録されているので、できるだけ早く登録するようにしました(拡張機能が最初にロードされ、ウィンドウロードイベントが発生しました)。どのようにそれを働かせるためにどのようなアイデア?

答えて

0

拡張子は、変更後のプロファイルの通知(拡張子が傍受されることが許可されているfirst通知)をリッスンするXPCOMコンポーネントとして記述する必要があります。これで、コンポーネントはセッションストア状態読み込み通知を聞くことができます。

関連する問題