В настоящее время я создаю расширение для Firefox, которое позволит вам выбирать, какие вкладки вы хотите открыть после запуска, вместо того, чтобы открывать все (открывается примерно: страница сеанса восстановления).Мой код JS выглядит следующим образом:
Редактировать: код обновлен с рабочей версией
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
components / 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, потому что я не хочу редактировать то, что записывает на диск.Проблема в том, что когда я переключаюсь на событие чтения, мой наблюдатель перестает работать.Я предполагаю, что я зарегистрировал наблюдателя слишком поздно (после того, как сессия прочитана), поэтому я попытался зарегистрировать его как можно скорее (когда расширение загружается впервые, установлено событие загрузки окна), но оно все равно не будет работать.Любая идея, как заставить это работать?