При работе с компонентом TWebBrowser в Delphi иногда возникает необходимость программной прокрутки содержимого до нижней части документа. Это может быть нужно для удобства пользователя или в рамках определенного алгоритма работы приложения.
Описание проблемы
Разработчики столкнулись с задачей программной прокрутки содержимого в TWebBrowser до его нижней части. Были попытки использовать методы scroll и ScrollIntoView(false), но они не привели к ожидаемому результату.
Примеры неудачных попыток
Вот пример кода, который не удалось использовать для прокрутки вниз по документу:
uses
MSHTML;
procedure TForm1.Button1Click(Sender: TObject);
var
Document: IHTMLDocument2;
begin
Document := WebBrowser.Document as IHTMLDocument2;
Document.parentWindow.scroll(0, Document.body.offsetHeight);
end;
А также попытка с использованием метода ScrollIntoView(false):
procedure TForm1.Button1Click(Sender: TObject);
var
Document: IHTMLDocument2;
begin
Document := WebBrowser.Document as IHTMLDocument2;
Document.Body.ScrollIntoView(false);
end;
Альтернативные способы прокрутки
Согласно рекомендациям, предпочтительным способом прокрутки является использование метода IHTMLWindow2::scrollTo. Этот метод действительно работает и не требует выполнения JavaScript кода.
Подтвержденный ответ
Для прокрутки к нижней части документа можно выполнить следующий код на языке JavaScript:
const
jsScrollDown = 'window.scrollTo(0, document.body.scrollHeight);';
var
Doc: IHTMLDocument2;
Hwn: IHTMLWindow2;
begin
Doc := WebBrowser1.Document as IHTMLDocument2;
if not Assigned(Doc) then Exit;
Hwn := Doc.parentWindow;
Hwn.execScript(jsScrollDown, 'JavaScript');
Или, используя новый компонент TEdgeBrowser, который поддерживает прямое выполнение скриптов:
EdgeBrowser1.ExecuteScript(jsScrollDown);
Также возможно использовать интерфейсы MS без JavaScript:
var
Doc: IHTMLDocument2;
Hwn: IHTMLWindow2;
begin
Doc := WebBrowser1.Document as IHTMLDocument2;
if not Assigned(Doc) then Exit;
Hwn := Doc.parentWindow;
Hwn.scrollTo(0, (Doc.body as IHTMLElement2).scrollHeight);
Обратите внимание, что использование интерфейсов MS работает только в устаревшем режиме IE, и не поддерживается движком Edge.
Заключение
При программной прокрутке в TWebBrowser до нижней части документа важно использовать методы, рекомендованные разработчиками. Выполнение JavaScript кода через метод execScript является одним из эффективных способов достижения этой цели. При работе с новыми компонентами, такими как TEdgeBrowser, следует учитывать их специфические возможности и рекомендации по использованию.
Необходимо реализовать программную прокрутку содержимого до нижней части документа в компоненте `TWebBrowser` в Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.