1

このコードを使用すると、OnRefresh または OnPreRefresh が BeforeNavigate2 を起動しないのはなぜですか。thisによると 、これはバグですが、Delphi で回避するにはどうすればよいですか? IE10でEmbeddedWBを使用しています。

EmbeddedWB1.Navigate('http://www.stackoverflow.com');
EmbeddedWB1.Refresh; // doesn't fire BeforeNavigate2 
4

2 に答える 2

2

ばかげた問題に対するかなり単純な解決策。

const
  DLCTL_PRAGMA_NO_CACHE = $00004000;

procedure Refresh(const Sender: TCustomEmbeddedWB);
var
  Flag: OleVariant;
begin
  Flag:=DLCTL_PRAGMA_NO_CACHE;
  Sender.Navigate(Sender.LocationURL,Flag);
end;

procedure EmbeddedWB1Refresh(Sender: TCustomEmbeddedWB; CmdID: Integer;
  var Cancel: Boolean);
begin
  Cancel:=True;
  Refresh(Sender);
end;
于 2013-08-11T09:01:01.207 に答える
0

Navigate2非同期操作です。でそれをフォローするとRefresh、ナビゲーションにBeforeNavigate2イベントを開始して発生させる機会が与えられません。NavigateComplete2おそらく、 を呼び出す前に、クビになるのを待つ必要がありますRefresh。正確に何を達成しようとしていますか?あなたが言及しているバグは、Delphi コードとは関係ありません。.NET に固有のもので、かなり前に修正されています。

[編集] . 上で言ったことは間違っていました。IE7 には当てはまったかもしれませんが、IE10 では、callBeforeNavigate2の直後に. ただし、それはWebBrowser コントロールによってそのサイト COM オブジェクトに送信されるトリガーまたはコマンドではありません。右クリックメニューから手動で更新をトリガーしたときにのみ、通過するのを見ました(ただし、まだありません)。これは、C++/ATL/VS2012 で検証されています。残念ながら、これは、Delphi で動作が異なる理由の答えにはなりません。NavigateComplete2NavigateRefreshOLECMDID_PREREFRESHOLECMDID_REFRESHOLECMDID_PREREFRESH OLECMDID_REFRESH

于 2013-08-11T08:03:11.887 に答える