Я добавляю некоторые новые функции в расширение Firefox, TryAgain , которое перехватывает коды ошибок HTTP (например, 500) и автоматически повторяет загрузку страницы через некоторый интервал.
Захват кодов работает превосходно, и я пытаюсь подсчитать общее количество повторов и сохранить это на вкладке, используя Session Store . К сожалению, сейчас я получаю ссылку на окно DOM (через interfaceRequestor.getInterface(Components.interfaces.nsIDOMWindow)
), но мне нужна ссылка на вкладку, которая является nsIDOMNode
согласно nsISessionStore docs для setTabValue () .
То, что у меня есть до сих пор (я попытался повторить попытку в этом примере):
// This function implements the nsIObserverService interface and observes
// the status of all HTTP channels
observe : function(aSubject, aTopic, aData) {
var httpChannel = aSubject
.QueryInterface(Components.interfaces.nsIHttpChannel);
if (httpChannel.responseStatus == 500) {
var domWindow;
try {
var notificationCallbacks;
if (httpChannel.notificationCallbacks) {
notificationCallbacks = httpChannel.notificationCallbacks;
} else {
notificationCallbacks = aSubject.loadGroup
.notificationCallbacks;
}
var interfaceRequestor = notificationCallbacks
.QueryInterface(Components.interfaces
.nsIInterfaceRequestor);
domWindow = interfaceRequestor
.getInterface(Components.interfaces.nsIDOMWindow);
} catch (e) {
// No window associated with this channel
return;
}
var ss = Components.classes["@mozilla.org/browser/sessionstore;1"]
.getService(Components.interfaces.nsISessionStore);
ss.setTabValue(domWindow, "foo", "bar");
}
},
Это, конечно, не работает на setTabValue
с недопустимым параметром. Как я могу получить вкладку, связанную с окном DOM?
Как альтернативное решение, могу ли я каким-либо образом хранить переменные, связанные с окном DOM, чтобы мне не приходилось очищать память самостоятельно?