Иногда программная прокрутка WebBrowser не работает - PullRequest
5 голосов
/ 10 июня 2009

Я использую элемент управления System.Windows.Forms.WebBrowser и мне нужно выполнить программную прокрутку.

Например, я использую этот код для прокрутки вниз:

WebBrowser.Document.Body.ScrollTop += WebBrowser.Height

Проблема в том, что на некоторых сайтах это работает, а на других - нет

http://news.google.com (works good)
http://stackoverflow.com/ (doesn't work)

Это может быть что-то с кодом тела, но я не могу понять.
Я также попробовал:

WebBrowser.Document.Window.ScrollTo(0, 50)

но так я не знаю текущую позицию.

Ответы [ 2 ]

5 голосов
/ 16 июня 2009

Этот пример обходит причуды в свойствах полосы прокрутки, которые могут вызвать поведение, которое вы видите.

Вам нужно будет добавить ссылку COM в библиотеку объектов Microsoft HTML (mshtml), прежде чем это сработает.

Предполагая, что у вас есть WebBrowser с именем webBrowser1, вы можете попробовать следующее. Я использую несколько разных интерфейсов, потому что обнаружил, что значения, возвращаемые для свойств прокрутки, несовместимы.

            using mshtml;

// ... snip ...

            webBrowser1.Navigate("http://www.stackoverflow.com");
            while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
            {
                Application.DoEvents();
                System.Threading.Thread.Sleep(20);
            }
            Rectangle bounds = webBrowser1.Document.Body.ScrollRectangle;
            IHTMLElement2 body = webBrowser1.Document.Body.DomElement as IHTMLElement2;
            IHTMLElement2 doc = (webBrowser1.Document.DomDocument as IHTMLDocument3).documentElement as IHTMLElement2;
            int scrollHeight = Math.Max(body.scrollHeight, bounds.Height);
            int scrollWidth = Math.Max(body.scrollWidth, bounds.Width);
            scrollHeight = Math.Max(body.scrollHeight, scrollHeight);
            scrollWidth = Math.Max(body.scrollWidth, scrollWidth);
            doc.scrollTop = 500;
4 голосов
/ 02 сентября 2012
 webBrowser1.Document.Window.ScrollTo(new Point(50, 50));

это простой способ прокрутки до каждой точки, просто введите

...