为什么OnRefresh或OnPreRefresh在使用此代码时不触发BeforeNavigate2。根据这的说法,这是一个错误,但是如何在Delphi中解决呢?我将EmbeddedWB与IE10结合使用。
EmbeddedWB1.Navigate('http://www.stackoverflow.com');
EmbeddedWB1.Refresh; // doesn't fire BeforeNavigate2 发布于 2013-08-11 09:01:01
解决一个愚蠢问题的简单方法。
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-11 08:03:11
Navigate2是一种异步操作。通过使用Refresh跟踪它,您不会给导航一个启动和触发BeforeNavigate2事件的机会。也许,在调用NavigateComplete2之前,您应该等待Refresh被解雇。你到底想达到什么目的?您所引用的bug与您的Delphi代码无关,它是特定于.NET的,并且很久以前就被修复了。
编辑的。我上面说的是不正确的。对于IE7来说可能是这样,但是对于IE10,BeforeNavigate2和NavigateComplete2都会被解雇(一次),即使Navigate调用被立即与Refresh一起执行。但是,这不会触发由OLECMDID_PREREFRESH控件向其site对象发送的OLECMDID_REFRESH或WebBrowser命令。只有当我通过右键菜单手动触发刷新时,我才看到OLECMDID_PREREFRESH (但仍然是no OLECMDID_REFRESH)。这一点已经用C++/ATL/ has 2012进行了验证。不幸的是,这无助于回答为什么Delphi的行为是不同的。
https://stackoverflow.com/questions/18169867
复制相似问题