2009-08-14 8 views

risposta

12

OK, ho risolto:

Dim htmlDoc As HtmlDocument = wb.Document 
Dim scrollTop As Integer = htmlDoc.GetElementsByTagName("HTML")(0).ScrollTop 
+0

Ho cercato il vasto web in alto e in basso e ho visto una miriade di soluzioni che non hanno funzionato, ma questo, finalmente questo, mi ha dato quello che volevo. Grazie, Marc. –

+0

Questo non funziona !!!, si aspetta il nome del metodo ?? per favore dimmi cosa mi manca ho cercato il web in alta e bassa per 3 giorni: '( – Pomster

+0

Questa risposta è scritta in VB. –

5

Per scorrere effettivamente, abbiamo rilevato che il metodo ScrollIntoView funzionava correttamente. Ad esempio, per scorrere fino all'angolo superiore sinistro della pagina.

this.webBrowser.Document.Body.FirstChild.ScrollIntoView(true); 

Tuttavia, non sono riusciti a ottenere effettivamente la posizione di scorrimento (che ha detto, non abbiamo fatto passare molto tempo cercando). Se hai il controllo del contenuto HTML, potresti prendere in considerazione l'uso di alcuni javascript per copiare la posizione di scorrimento in un elemento nascosto e quindi leggere quel valore usando il DOM.

ScrollTop e ScrollLeft consentono semplicemente di fornire un offset tra il limite di un elemento e il suo contenuto. Sembra che non ci sia modo di manipolare la pergamena con quei valori. Invece, devi usare ScrollIntoView.

+0

I Non ho il controllo del contenuto HTML, quindi non funzionerà per me. So delle funzioni ScrollIntoView e ScrollTo, ma invece di scorrere voglio accedere alla barra di scorrimento nel componente del browser per leggere i valori. Naturalmente potrei inserire qualche javascript nella pagina e lasciare che legga i valori, ma questa è un'opzione che preferisco non usare. –

0

sono stato in grado di interrogare la posizione di scorrimento di utilizzare questo

 if (this.webBrowser.Document != null) 
     { 
      int scrollPosition = this webBrowser.Document.Body.ScrollTop;     
     } 
0

È possibile controllare documentElement

IHTMLElement2 page = 
(wb.Document.DomDocument as IHTMLDocument3).documentElement as IHTMLElement2; 
int pos = page.scrollTop; 
0

risposta accettata è VB. Per C# WPF WebBrowser, ho dovuto scrivere quanto segue. Non ho idea se ho davvero bisogno di tutti quei calchi o no. Se uno può sbarazzarsi di uno di quei calchi, sarebbe fantastico.

using mshtml; 
int? GetScrollTop(System.Windows.Controls.WebBrowser browser) 
{ 
    object doc = browser.Document; 
    HTMLDocument castDoc = doc as HTMLDocument; 
    IHTMLElementCollection elements = castDoc?.getElementsByTagName("HTML"); 
    IEnumerator enumerator = elements?.GetEnumerator(); 
    enumerator?.MoveNext(); 
    var first = enumerator?.Current; 
    IHTMLElement2 castFirst = first as IHTMLElement2; 
    int? top = castFirst?.scrollTop; 
    return top; 
} 
2

Per chiunque sia interessato, ecco il codice C# equivalente alla risposta di Marc:

System.Windows.Forms.HtmlDocument htmlDoc = webBrowser.Document; 
if (htmlDoc != null) 
{ 
    int scrollTop = htmlDoc.GetElementsByTagName("HTML")[0].ScrollTop; 
    int scrollLeft = htmlDoc.GetElementsByTagName("HTML")[0].ScrollLeft; 
} 
0

Ho trovato la risposta di Kurt quasi funzionato, ma ha dovuto modificare il riferimento array come segue:

var document = (HTMLDocument)Browser.Document; 
var scrollTop = (int)document.getElementsByTagName("HTML").item(0).ScrollTop; 
Problemi correlati