2009-08-14 12 views

Respuesta

12

OK, lo resolví:

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

He buscado en la gran web alta y baja y he visto una miríada de soluciones que no han funcionado, pero esto, finalmente, me dio lo que quería. Gracias, Marc. –

+0

¡Esto no funciona! ¿Se espera el nombre del método? por favor, dígame qué me falta si busqué en la web alta y baja durante 3 días: '( – Pomster

+0

) Esta respuesta está escrita en VB. –

5

Para desplazarse realmente, encontramos que el método ScrollIntoView funcionó bien. Por ejemplo, para desplazarse a la esquina superior izquierda de la página.

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

Sin embargo, no tuvimos éxito en conseguir realmente la posición de desplazamiento (que dijimos, que no pasamos mucho tiempo tratando). Si tiene el control del contenido HTML, puede considerar usar algún javascript para copiar la posición de desplazamiento en un elemento oculto y luego leer ese valor usando el DOM.

ScrollTop y ScrollLeft simplemente permiten proporcionar un desplazamiento entre el límite de un elemento y su contenido. Parece que no hay forma de manipular el desplazamiento por esos valores. En su lugar, debe usar ScrollIntoView.

+0

I No tengo el control del contenido HTML, así que eso no funcionará para mí. Sé sobre las funciones ScrollIntoView y ScrollTo, pero en lugar de desplazarme, quiero acceder a la barra de desplazamiento en el componente webbrowser para leer los valores. Por supuesto, podría insertar algunos javascript en la página y dejar que lea los valores, pero esa es una opción que prefiero no usar. –

0

que era capaz de consultar la posición de desplazamiento que utiliza este

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

Puede comprobar documentElement

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

respuesta aceptada es VB. Para C# WPF WebBrowser, tuve que escribir lo siguiente. No tengo idea si realmente necesito todos esos moldes o no. Si uno puede deshacerse de cualquiera de esos moldes, eso sería fantástico.

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

Para todos los interesados, aquí está el código C# equivalente a la respuesta de 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

me encontré con la respuesta de Kurt casi funcionó, pero tuvo que cambiar la referencia de matriz de la siguiente manera:

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