gpt4 book ai didi

delphi - 如何检测 TWebBrowser 中的导航而不是单击 URL?

转载 作者:行者123 更新时间:2023-12-03 15:29:00 30 4
gpt4 key购买 nike

我正在使用 TWebBrowser显示一些 HTML 内容(本地)。该应用程序分为两半,上半部分有 5 个选项卡,下半部分是 Web 浏览器。浏览器的内容经常发生变化,例如更改到不同的选项卡时。

显示的内容包括我需要阻止和停止每次点击的 URL。我正在尝试使用事件 OnBeforeNavigate2它确实检测点击的每个链接,但也检测我何时以编程方式调用 Navigate 。因此,它最终永远不会导航到任何地方。

我尝试包装 Navigate打电话,所以我总是打电话......

procedure TForm1.Nav(const S: String);
begin
FLoading:= True;
try
Web.Navigate(S);
Sleep(50);
finally
FLoading:= False;
end;
end;

( sleep 只是为了尝试给它一点时间等待)

然后捕获调用...

procedure TForm1.WebBeforeNavigate2(ASender: TObject; const pDisp: IDispatch;
const URL, Flags, TargetFrameName, PostData, Headers: OleVariant;
var Cancel: WordBool);
begin
if not FLoading then
Cancel:= True;
end;

没有运气尝试这个技巧。如何检测页面或用户何时导航,但不检测浏览器何时被指示导航?

最佳答案

请注意,以下内容未记录。一些people say它适用于我(在 Windows 7 64 位和 Internet Explorer 10 上)检查 Flags 参数的神奇常量。如果 OnBeforeNavigate2 事件的 Flags 参数等于 64,则表明是用户浏览了该链接。如果 Flags 参数等于 0,则为 IWebBrowser2::Navigate方法,谁调用了导航。在代码中它将是:

procedure TForm1.WebBrowser1BeforeNavigate2(ASender: TObject;
const pDisp: IDispatch; const URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
begin
if (Flags and navHyperlink) = navHyperlink then
ShowMessage('User clicked a link...')
else
ShowMessage('IWebBrowser2::Navigate has been invoked...');
end;

如果这只是无意中未记录的标志值,我不会感到太惊讶,因为 MSDN 的这一部分很糟糕。

关于delphi - 如何检测 TWebBrowser 中的导航而不是单击 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17947630/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com