2010-03-19 34 views
4

我正在爲使用VS2008的Firefox 3.0-3.5版本開發擴展。使用C++在nsIWebProgressListener :: OnStateChange中訪問Firefox選項卡元素

我想設置屬性到一個標籤,一旦文件加載請求在該標籤窗口內完成。

所以在OnStateChange方法中,我正在檢查文檔加載。 我已經使用了STATE_STOP & STATE_IS_DOCUMENT。

我想確定哪個選項卡窗口與特定的文檔請求相關聯。

我有有效的DOM從nsIWebProgress獲取的文檔指針* aWebProgress是第一個輸入 OnStateChange的參數。

if ((aStateFlags & STATE_STOP) && (aStateFlags & STATE_IS_DOCUMENT)) 
{ 
    nsCOMPtr<nsIDOMWindow> domwin; 
    nsCOMPtr<nsIDOMDocument> domDoc; 
    aWebProgress->GetDOMWindow(getter_AddRefs(domwin)); 
    domwin->GetDocument(getter_AddRefs(domDoc)); 
} 

我試圖通過QIing nsIDOMDocument指針(在我的例子domDoc)獲得nsIDOMDocumentXBL指針,但它失敗,錯誤代碼0x80004002(2147500034)i.e.NS_ERROR_NO_INTERFACE。

如何獲取與文檔加載請求相對應的選項卡元素。

任何人都可以幫我嗎?

在此先感謝, Vaibhav D. Gade。

回答

1

如果我正確地理解了這個問題,並且想要一個內容窗口,那麼您可能需要https://developer.mozilla.org/en/Working_with_windows_in_chrome_code#Accessing_the_elements_of_the_top-level_document_from_a_child_window才能獲得chrome窗口,然後在chrome窗口中運行gBrowser.getBrowserForDocument的實現。

如果你停止編寫C++並切換到JS這樣的事情,你會節省很多時間。

+2

肯定會去的JS是這裏的方式。你會節省很多頭痛。 – CAFxX 2011-01-10 17:25:05

相關問題