我上增加對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