为什么OnRefresh或OnPreRefresh在使用此代码时不会触发BeforeNavigate2。根据 this这是一个bug但是如何在Delphi中解决它?我在IE10中使用EmbeddedWB。
EmbeddedWB1.Navigate('http://www.stackoverflow.com');
EmbeddedWB1.Refresh; // doesn't fire BeforeNavigate2
答案 0 :(得分: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;
答案 1 :(得分:0)
Navigate2
是一个异步操作。通过Refresh
跟随它,您不会让导航有机会启动并触发BeforeNavigate2
事件。也许,在致电NavigateComplete2
之前,您应该等待Refresh
被解雇。你到底想要达到什么目的?您提到的错误与您的Delphi代码无关,它特定于.NET并且很久以前就已修复。
<强> [EDITED] 即可。我上面说的不正确。对于IE7来说可能是这样,但对于IE10,BeforeNavigate2
和NavigateComplete2
都会被触发(一次),即使Navigate
调用紧跟Refresh
。但是,这不会触发WebBrowser控件将OLECMDID_PREREFRESH
或OLECMDID_REFRESH
命令发送到其站点COM对象。当我通过右键单击菜单手动触发刷新时,我才看到OLECMDID_PREREFRESH
正在通过(但仍否 OLECMDID_REFRESH
)。这已通过C ++ / ATL / VS2012验证。不幸的是,这无助于回答为什么Delphi的行为不同。