TWebBrowser 处理关闭请求
TWebBrowser Handle close request
我将 TWebBrowser 与 class 帮助程序一起使用,它引入了一些新功能(如果这与以下问题相关):
type
TWebBrowserEx = class helper for TWebBrowser
public
procedure Clear;
procedure Wait;
function LoadHTML(const HTML: string; const AFakeURL: string=''): boolean;
end;
我注意到如果 JavaScript 想要关闭浏览器 window,TWebBrowser 的句柄会被破坏。
<script type="text/javascript">
window.close();
</script>
调用 TWebBrowser.LoadHTML() 等将导致异常。
我想决定当 JavaScript 想要关闭 window 时我的应用程序做什么。
(我的想法是,基于配置设置,要么清除页面并让应用程序保持打开状态,要么关闭应用程序)。
问:我该如何处理?
我的第一个猜测是收到 WM_DESTROY 消息,但我认为它不适用于 class 助手,因为没有任何反应。
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;
您将 TWebBrowser
的 OnWindowClosing
处理程序分配给这样的东西:
procedure TForm1.WebBrowser1WindowClosing(
ASender: TObject;
IsChildWindow: WordBool;
var Cancel: WordBool
);
begin
Cancel := True;
end;
这不会生成 "Do you want to close the window?" 对话框,并且只是丢弃 JavaScript 请求以关闭 window。
我将 TWebBrowser 与 class 帮助程序一起使用,它引入了一些新功能(如果这与以下问题相关):
type
TWebBrowserEx = class helper for TWebBrowser
public
procedure Clear;
procedure Wait;
function LoadHTML(const HTML: string; const AFakeURL: string=''): boolean;
end;
我注意到如果 JavaScript 想要关闭浏览器 window,TWebBrowser 的句柄会被破坏。
<script type="text/javascript">
window.close();
</script>
调用 TWebBrowser.LoadHTML() 等将导致异常。
我想决定当 JavaScript 想要关闭 window 时我的应用程序做什么。 (我的想法是,基于配置设置,要么清除页面并让应用程序保持打开状态,要么关闭应用程序)。
问:我该如何处理? 我的第一个猜测是收到 WM_DESTROY 消息,但我认为它不适用于 class 助手,因为没有任何反应。
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;
您将 TWebBrowser
的 OnWindowClosing
处理程序分配给这样的东西:
procedure TForm1.WebBrowser1WindowClosing(
ASender: TObject;
IsChildWindow: WordBool;
var Cancel: WordBool
);
begin
Cancel := True;
end;
这不会生成 "Do you want to close the window?" 对话框,并且只是丢弃 JavaScript 请求以关闭 window。