【问题标题】:BeforeNavigate2 & RefreshBeforeNavigate2 和刷新
【发布时间】:2013-08-11 07:47:30
【问题描述】:

使用此代码时,为什么 OnRefresh 或 OnPreRefresh 不触发 BeforeNavigate2。根据 this 这是一个错误,但如何在 Delphi 中解决它?我正在使用带有 IE10 的 EmbeddedWB。

EmbeddedWB1.Navigate('http://www.stackoverflow.com');
EmbeddedWB1.Refresh; // doesn't fire BeforeNavigate2 

【问题讨论】:

  • 您应该提到Webbrowser1 被声明为TEmbeddedWB 类型。请编辑您的问题并包含此信息。
  • @TLama 啊我忘了 :)

标签: delphi internet-explorer twebbrowser delphi-xe4


【解决方案1】:

一个愚蠢问题的相当简单的解决方案。

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;

【讨论】:

  • 真的有解决方案吗?这就是IWebBrowser2::Refresh 目前应该做的事情。请参阅该参考页的备注部分...
  • @TLama EmbeddedWB.Refresh/Refresh2 不会触发 DocumentComplete 或 OnBeforeNavigate2。这将。
  • 好吧,除了 DocumentCompleteBeforeNavigate2 事件,RefreshRefresh2 方法甚至不会更改 Busy 标志或 ReadyState 值。因此,您的代码可能确实是解决您的问题的正确方法。 [+1]
  • @TLama 我们可以聊聊吗 :) 我有一个关于 TEmbeddedWB 的问题。
【解决方案2】:

Navigate2 是一个异步操作。通过使用Refresh 跟随它,您不会让导航有机会启动并触发BeforeNavigate2 事件。也许,您应该等待NavigateComplete2 被解雇,然后再致电Refresh。你到底想达到什么目的?您提到的错误与您的 Delphi 代码无关,它特定于 .NET 并且很久以前就已修复。

[已编辑]。我上面说的不正确。对于 IE7 可能是这样,但对于 IE10,BeforeNavigate2NavigateComplete2 都会被触发(一次),即使 Navigate 调用后紧跟 Refresh。但是,这不会触发 WebBrowser 控件向其站点 COM 对象发送的 OLECMDID_PREREFRESHOLECMDID_REFRESH 命令。当我通过右键菜单手动触发刷新时,我只看到 OLECMDID_PREREFRESH 出现(但仍然no OLECMDID_REFRESH)。这已通过 C++/ATL/VS2012 验证。不幸的是,这无助于回答为什么 Delphi 的行为不同。

【讨论】:

  • Refresh 根本不会触发 BeforeNavigate2。什么时候调用都没关系。
  • @user2665920,我在 IE 7 天内处理过类似的问题。我将用现代版本验证它并返回这里。
  • 这与Delphi无关,与IWebBrowser2接口本身有关。如果您在其上调用Refresh 方法,则这些事件不会被接口触发。不止于此;甚至Busy 标志都没有设置,甚至ReadyState 值也没有改变。
  • 是的。我可能误解了@user2665920 的问题:尽管调用了EmbeddedWB1.Navigate,然后是EmbeddedWB1.Refresh,但Delphi 中好像没有BeforeNavigate2 事件。
猜你喜欢
  • 1970-01-01
  • 2013-12-26
  • 2011-12-29
  • 1970-01-01
  • 2015-06-20
  • 2018-02-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-08
相关资源
最近更新 更多