現在、起動時に開いた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イベントに変更すると、私のオブザーバーが動作しなくなることです。私の推測では、オブザーバーが遅すぎる(セッションが読み込まれた後に)登録されているので、できるだけ早く登録するようにしました(拡張機能が最初にロードされ、ウィンドウロードイベントが発生しました)。どのようにそれを働かせるためにどのようなアイデア?