如何在 Delphi 中滚动到TWebBrowser文档的底部

ymdaylpp  于 2023-02-08  发布在  其他
关注(0)|答案(1)|浏览(198)

我正尝试以编程方式滚动到显示的TWebBrowser文档的底部。
我试过使用scroll方法:

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;
ccgok5k5

ccgok5k51#

只需运行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);

运行JS代码,允许轻松滚动到HTML文档的任何元素。
使用MS接口,不使用JS,可以像这样完成:

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接口仅在legacy IE模式下工作,Edge引擎不支持。

相关问题