このコードを使用すると、OnRefresh または OnPreRefresh が BeforeNavigate2 を起動しないのはなぜですか。thisによると 、これはバグですが、Delphi で回避するにはどうすればよいですか? IE10でEmbeddedWBを使用しています。
EmbeddedWB1.Navigate('http://www.stackoverflow.com');
EmbeddedWB1.Refresh; // doesn't fire BeforeNavigate2
このコードを使用すると、OnRefresh または OnPreRefresh が BeforeNavigate2 を起動しないのはなぜですか。thisによると 、これはバグですが、Delphi で回避するにはどうすればよいですか? IE10でEmbeddedWBを使用しています。
EmbeddedWB1.Navigate('http://www.stackoverflow.com');
EmbeddedWB1.Refresh; // doesn't fire BeforeNavigate2
ばかげた問題に対するかなり単純な解決策。
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;
Navigate2
非同期操作です。でそれをフォローするとRefresh
、ナビゲーションにBeforeNavigate2
イベントを開始して発生させる機会が与えられません。NavigateComplete2
おそらく、 を呼び出す前に、クビになるのを待つ必要がありますRefresh
。正確に何を達成しようとしていますか?あなたが言及しているバグは、Delphi コードとは関係ありません。.NET に固有のもので、かなり前に修正されています。
[編集] . 上で言ったことは間違っていました。IE7 には当てはまったかもしれませんが、IE10 では、callBeforeNavigate2
の直後に. ただし、それはWebBrowser コントロールによってそのサイト COM オブジェクトに送信されるトリガーまたはコマンドではありません。右クリックメニューから手動で更新をトリガーしたときにのみ、通過するのを見ました(ただし、まだありません)。これは、C++/ATL/VS2012 で検証されています。残念ながら、これは、Delphi で動作が異なる理由の答えにはなりません。NavigateComplete2
Navigate
Refresh
OLECMDID_PREREFRESH
OLECMDID_REFRESH
OLECMDID_PREREFRESH
OLECMDID_REFRESH