TWebBrowser Handle закрыть запрос - PullRequest
0 голосов
/ 25 февраля 2020

Я использую 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.Load HTML () et c. приведет к исключению.

Я бы хотел решить, что будет делать мое приложение, когда 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;

1 Ответ

3 голосов
/ 25 февраля 2020

Вы присваиваете обработчику OnWindowClosing вашего TWebBrowser что-то вроде этого:

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

Это не вызовет "Вы хотите закрыть окно?" диалоговое окно и просто отмените запрос JavaScript на закрытие окна.

...