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,BeforeNavigate2即使NavigateComplete2callNavigate后面紧跟Refresh. 但是,这不会触发WebBrowser 控件OLECMDID_PREREFRESHOLECMDID_REFRESH将命令发送到其站点 COM 对象。我只有在OLECMDID_PREREFRESH通过右键菜单手动触发刷新时才看到(但仍然没有 OLECMDID_REFRESH)。这已通过 C++/ATL/VS2012 验证。不幸的是,这无助于回答为什么 Delphi 的行为不同。

于 2013-08-11T08:03:11.887 回答