Я работаю над добавлением поддержки Firefox 6 для моего дополнения в Mac OS, где следующая логика работает в версиях Firefox 4,5, но не работает в Firefox 6.
Компонент XPCOM имеет подклассIObserverClient
и добавляет себя в качестве наблюдателя для пользовательского события.Это пользовательское событие отправляется из браузера overlay.js, пропуская окно содержимого выбранного браузера.
var observerService = Components.classes["@mozilla.org/observer-service;1"]
.getService(Components.interfaces.nsIObserverService);
if (observerService) {
var data = gBrowser.selectedBrowser.contentWindow.location.href;
observerService.notifyObservers(gBrowser.selectedBrowser.contentWindow, JSEventTopic, data);
}
В обработчике компонентов XPCOM пытается получить интерфейс nsIDOMWindow
из nsISupports
void XXX::Observe(nsISupports *aSubject, const char *aTopic, const PRUnichar *aData)
{
nsCOMPtr<nsIDOMWindow> pWin;
aSubject->QueryInterface(nsIDOMWindow::GetIID(), getter_AddRefs(pWin));
}
Проблема в том, что с Firefox 6 pWin
ноль.В Firefox 4 и 5 pWin
- это как ожидалось, а не ноль.