首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BeforeNavigate2 & Refresh

BeforeNavigate2 & Refresh
EN

Stack Overflow用户
提问于 2013-08-11 07:47:30
回答 2查看 1.7K关注 0票数 1

为什么OnRefresh或OnPreRefresh在使用此代码时不触发BeforeNavigate2。根据的说法,这是一个错误,但是如何在Delphi中解决呢?我将EmbeddedWB与IE10结合使用。

代码语言:javascript
复制
EmbeddedWB1.Navigate('http://www.stackoverflow.com');
EmbeddedWB1.Refresh; // doesn't fire BeforeNavigate2 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-11 09:01:01

解决一个愚蠢问题的简单方法。

代码语言:javascript
复制
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;
票数 2
EN

Stack Overflow用户

发布于 2013-08-11 08:03:11

Navigate2是一种异步操作。通过使用Refresh跟踪它,您不会给导航一个启动和触发BeforeNavigate2事件的机会。也许,在调用NavigateComplete2之前,您应该等待Refresh被解雇。你到底想达到什么目的?您所引用的bug与您的Delphi代码无关,它是特定于.NET的,并且很久以前就被修复了。

编辑的。我上面说的是不正确的。对于IE7来说可能是这样,但是对于IE10,BeforeNavigate2NavigateComplete2都会被解雇(一次),即使Navigate调用被立即与Refresh一起执行。但是,这不会触发由OLECMDID_PREREFRESH控件向其site对象发送的OLECMDID_REFRESH或WebBrowser命令。只有当我通过右键菜单手动触发刷新时,我才看到OLECMDID_PREREFRESH (但仍然是no OLECMDID_REFRESH)。这一点已经用C++/ATL/ has 2012进行了验证。不幸的是,这无助于回答为什么Delphi的行为是不同的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18169867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档