我上增加对Firefox 6的支持对我的附加在Mac OS,在下面的逻辑是通过工作内容的浏览器窗口在Firefox 4.5版本的工作,但无法在Firefox 6火狐6:问题的QueryInterface(nsIDOMWindow :: GetIID()的XPCOM组件,从JS
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
是预期的,而不是零。
这是不太可能关系到你的问题,但你应该考虑使用['do_QueryInterface'(https://developer.mozilla.org/en/Using_nsCOMPtr/Reference_Manual#nsCOMPtr.3CT.3E_.3D_do_QueryInterface。 28_nsISupports.2A_.29.2CnsCOMPtr.3CT.3E_.3D_do_QueryInterface.28_nsISupports.2A.2C_nsresult.2A_.29):'nsCOMPtr的 PWIN(do_QueryInterface(pSubject));' –
我注意到你'Observe'函数使用参数名称为'aSubject',但函数内的代码使用'pSubject'来代替。这可能只是一个复制粘贴错误,或者它可能是您的实际代码中的严重问题。 –
感谢您指出,这是帖子中的复制粘贴错误。 – Swetha