Обнаружение события обновления TWebBrowser в Delphi 2009 - PullRequest
3 голосов
/ 07 декабря 2009

Я использую компонент TWebBrowser, который я использую для загрузки документов XML, связанных с файлом XSL.

У меня есть страница по умолчанию, которую я показываю, когда документ XML не загружен. Однако, если пользователь удаляет XML-файл, когда он открыт в браузере, а затем обновляется, я получаю стандартный ресурс , который не может быть найден ошибка. Вместо этого я хотел бы, чтобы страница не загружалась, проверьте, существует ли файл и не загружает ли она страницу по умолчанию снова.

Я пытался использовать события OnNavigateError и OnBeforeNavigate2, однако они не запускаются при обновлении.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 07 декабря 2009

Существует событие onRefresh, которое открывается при замене TWebBrowser TEmbeddedWB . Эта версия также предоставляет множество других функций, которые в противном случае скрыты компонентом TWebBrowser.

0 голосов
/ 22 декабря 2009

Это что-то вроде клочья, но он работает в моих тестах с использованием стандартного компонента TWebBrowser.

Я переопределил клавишу F5 в событии OnKeyUp формы. Установив для свойства KeyPreview формы значение True, вы можете вызвать собственное обновление. Видя, что метод TWebBrowser.Refresh не вызывает каких-либо навигационных событий (как вы сказали в своем вопросе), я сам вызываю событие TWebBrowser.Navigate, которое вызывает события.

Вам нужно сохранить URL, который, я полагаю, вы уже делаете. Но если нет, то в событии BeforeNavigate2 вам дается URL в качестве параметра. Так что сохраните это в переменной или на экране управления. Затем, когда нажата клавиша F5 (или кнопка «Обновить», если она была отображена на экране), просто перейдите к этому URL-адресу. Все события OnBeforeNavigate2, OnNavigateComplete2 и OnDocumentComplete запускаются снова, что дает вам возможность выполнить тест и поместить страницу-заполнитель вместо страницы ошибок IE по умолчанию.

procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
begin
  Edit1.Text := URL;
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Key = VK_F5) then
  begin
    WebBrowser1.Navigate(Edit1.Text);
  end;
end;
...