3


0

Delphi 2009でTWebBrowser更新イベントを検出する

XSLファイルにリンクされているXMLドキュメントを読み込むために使用するTWebBrowserコンポーネントを使用しています。

XMLドキュメントがロードされていないときに表示するデフォルトページがあります。 ただし、ブラウザで開いている間にユーザーがXMLファイルを削除してから更新すると、標準の*リソースが見つかりません*エラーが発生します。 私が代わりにやりたいのは、ページをロードできない場合、ファイルが存在することを確認し、デフォルトのページを再度ロードしない場合です。

OnNavigateErrorおよび `OnBeforeNavigate2`イベントを使用してみましたが、更新時にトリガーされないようです。

何か案は?

2 Answer


1


TWebBrowserの代替http://www.bsalsa.com/product.html[TEmbeddedWB]によって公開されるonRefreshイベントがあります。 また、このバージョンでは、TWebBrowserコンポーネントによって隠されている他の多くの機能も公開しています。


0


これは少し面倒ですが、私のテストでは、標準のTWebBrowserコンポーネントを使用して動作します。

私がしたことは、フォームの `OnKeyUp`イベントでF5キーをオーバーライドすることでした。 フォームの `KeyPreview`プロパティをTrueに設定することにより、独自の更新を呼び出すことができます。 TWebBrowser.Refreshメソッドがナビゲーションイベントを呼び出さないように見えるので(質問で述べたように)、私はTWebBrowser.Navigateイベントを自分で呼び出します。

URLを保存する必要がありますが、これは既に実行していると思います。 しかし、そうでない場合は、 BeforeNavigate2`イベントで、パラメーターとして URL`が与えられます。 そのため、これを変数または画面上のコントロールに保存します。 次に、F5キーを押したとき(または画面に1つ置いた場合は[更新]ボタン)、その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;