Я работаю над добавлением поддержки 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
соответствует ожиданиям, а не нулю.
nsCOMPtr<nsIDOMWindow> pWin(do_QueryInterface(pSubject));
- person Wladimir Palant   schedule 22.08.2011Observe
использует имя параметраaSubject
, но код внутри функции использует вместо этогоpSubject
. Это может быть просто ошибка копирования и вставки, или это может быть серьезная проблема в вашем реальном коде. - person Stuart Cook   schedule 22.08.2011