在Delphi 2009中检测TWebBrowser刷新事件

3
我正在使用TWebBrowser组件,用于加载链接到XSL文件的XML文档。当没有加载XML文档时,我有一个默认页面进行展示。但是,如果用户在浏览器中打开XML文件并将其删除,然后刷新页面,我会收到标准的“找不到资源”的错误。相反,我想要做的是,如果无法加载页面,则检查文件是否存在,如果不存在,则重新加载默认页面。我尝试使用OnNavigateErrorOnBeforeNavigate2事件,但是它们似乎不会在刷新时触发。有什么建议吗?
2个回答

1

TWebBrowser替代品TEmbeddedWB公开了onRefresh事件。此版本还公开了许多其他由TWebBrowser组件隐藏的功能。


0

这是一个有点笨拙但在我的测试中有效的方法,使用标准的TWebBrowser组件。

我所做的是在表单的OnKeyUp事件中覆盖F5键。通过将表单的KeyPreview属性设置为True,您可以调用自己的刷新。由于TWebBrowser.Refresh方法似乎没有调用任何导航事件(正如您在问题中所说),我自己调用了TWebBrowser.Navigate事件,这确实触发了事件。

您需要存储URL,我想您已经在这样做了。但如果没有,在BeforeNavigate2事件中,您将获得URL作为参数。因此,请将其存储在变量或屏幕控件中。然后,当按下F5键(或刷新按钮,如果您已经将其放在屏幕上)时,只需再次导航到该URL。 OnBeforeNavigate2OnNavigateComplete2OnDocumentComplete事件都会再次触发,使您有机会执行测试并将占位符页面放置在IE的默认错误页面上。

procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
begin
  Edit1.Text := URL;
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Key = VK_F5) then
  begin
    WebBrowser1.Navigate(Edit1.Text);
  end;
end;

TWebBrowser的上下文菜单默认不是启用的吗?这意味着用户也可以通过上下文菜单刷新,从而绕过您对F5的检查。在这种情况下,Samradts建议使用一个替代控件,该控件会显示OnRefresh事件,似乎更好。 - Otherside

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接