我正在将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;
您将OnWindowClosing
的TWebBrowser
处理程序分配给这样的东西:
procedure TForm1.WebBrowser1WindowClosing(
ASender: TObject;
IsChildWindow: WordBool;
var Cancel: WordBool
);
begin
Cancel := True;
end;
这不会产生“您要关闭窗口吗?”对话框,然后简单地放弃JavaScript请求以关闭窗口。