TWebBrowser句柄关闭请求

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TWebBrowser句柄关闭请求相关的知识,希望对你有一定的参考价值。

我正在将TWebBrowser与引入一些新功能的类帮助程序一起使用(以防与下面的问题有关:]

type
  TWebBrowserEx = class helper for TWebBrowser
  public
    procedure Clear;
    procedure Wait;
    function Loadhtml(const HTML: string; const AFakeURL: string=''): boolean;
  end;

我注意到,如果javascript要关闭浏览器窗口,则TWebBrowser的句柄将被破坏。

<script type="text/javascript">
   window.close();
</script>

调用TWebBrowser.LoadHTML()等将导致异常。

我想决定当JavaScript要关闭窗口时我的应用程序做什么。(我的想法是,基于配置设置,请清除页面并让应用程序保持打开状态,或关闭该应用程序。)

问题:我该如何处理?我的第一个猜测是收到WM_DESTROY消息,但我认为它不适用于类帮助程序,因为什么也没发生。

type
  TWebBrowserEx = class helper for TWebBrowser
  private
    procedure MessageDestroy(var msg: TMessage); message WM_DESTROY; // <-- will never be called
  public
    procedure Clear;
    procedure Wait;
    function LoadHTML(const HTML: string; const AFakeURL: string=''): boolean;
  end;
答案

您将OnWindowClosingTWebBrowser处理程序分配给这样的东西:

procedure TForm1.WebBrowser1WindowClosing(
    ASender: TObject;
    IsChildWindow: WordBool;
    var Cancel: WordBool
);
begin
    Cancel := True;
end;

这不会产生“您要关闭窗口吗?”对话框,然后简单地放弃JavaScript请求以关闭窗口。

以上是关于TWebBrowser句柄关闭请求的主要内容,如果未能解决你的问题,请参考以下文章

易语言怎么通过窗口句柄实现关闭该窗口或发送东西

终于懂了:Delphi重定义消息结构随心所欲,只需要前4个字节是消息编号就行了,跟Windows消息虽然尽量保持一致,但其实相互没有特别大的关系。有了这个,就有了主动,带不带句柄完全看需要。(代码片段

使用PHP中的curl发送请求

从 Delphi 10.3 中的 TWebBrowser OnNavigateError 中提取 StatusCode

关闭 websocket 时出现 SignalR 错误 - 句柄无效

Delphi 中TWebBrowser的扩展控件TExWebBrowser