2013-07-13 74 views
0

我正在使用.Net 4.0 WebBrowser(來自System.Windows.Controls)。在我的應用程序中,用戶可以修改html數據,網頁瀏覽器顯示更新。應用程序應該自動滾動到顯示的前一個元素。如何在WebBrowser中獲取第一個可見的html元素?

我使用WPF/C上的窗口#4.0 7.

詳細地:

  • 在我請WebBrowser.NavigateToString(htmlData1)的代碼;
  • 用戶滾動到任意位置
  • 用戶改變(在某種程度上)HTML文檔
  • 現在我想找到(記住)所顯示
  • 我稱之爲web瀏覽器的第一個HTML元素.NavigateToString(htmlData2);
  • 現在我想用記憶的元素自動滾動HTML文件(我知道有IHTMLElement.scrollIntoView()來做到這一點)

所以現在的問題是:如何獲得第一WebBrowser中的可見html元素?

你可能會說更新的html不會有記憶的元素了。對。但我在文檔中有時間戳,並將使用記憶的html元素在新的html文檔中找到最佳位置。

+0

多個元素可以覆蓋任意位置,如果他們沒有邊框,填充或間隔,例如, h3,p,span,a,img。你打算用哪一個作爲主播?另外,如果元素沒有ID,那麼如何識別元素?查找動態頁面的模式需要一些時間對服務器端代碼進行反向工程。 –

回答

0

我想我找到了正確的方法來使用。當文檔被刷新時,實際上有兩種可能性來保持滾動位置。

假設以下成員:

WebBrowser _browser; 
HTMLDocument HtmlDoc { get { return (HTMLDocument)_browser.Document; } } 

(1)如果文件並沒有真正改變(在我的例子只是在風格改變),我用的是當前的滾動位置,自動滾動更新後:

  • 刷新前:

    _scrollPos = ((IHTMLElement2)(HtmlDoc.documentElement)).scrollTop; 
    
  • 刷新後:

    HtmlDoc.parentWindow.scrollTo(0, _scrollPos); 
    

(2)如果文檔已經改變使用我的文檔的左上元件(也就是已知結構的)

  • 刷新之前:

    IHTMLElement el = HtmlDoc.elementFromPoint(50, 0); 
    

    用這個el做一些魔術(需要doc的知識),記住一些可以用來搜索更新後最好的元素的字符串。

    string beforeRefresh = fromElement(el); 
    
  • 後刷新使用想起字符串,並搜索在重裝HTML文檔的最佳html元素。

    IHTMLElement newEl = fromString(beforeRefresh); 
    newEl.scrollIntoView(true); 
    

所以實際的方法,我缺的是elementFromPoint()。其餘的是「定製邏輯」。

相關問題