我正在使用TWebBrowser
来显示一些HTML内容(本地)。应用程序分为两半,上半部分有5个选项卡,下半部分是Web浏览器。浏览器的内容经常更改,例如更改为其他选项卡时。 p>
显示的内容包括我需要阻止和停止每次点击的网址。我正在尝试使用事件OnBeforeNavigate2
来检测点击的每个链接,但也会检测我以编程方式调用Navigate
的时间。因此,它永远不会在任何地方导航。
我尝试包裹Navigate
来电,所以我总是打电话给......
procedure TForm1.Nav(const S: String);
begin
FLoading:= True;
try
Web.Navigate(S);
Sleep(50);
finally
FLoading:= False;
end;
end;
(睡觉只是试着给它一瞬间等待)
然后捕捉电话......
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;
没有运气尝试这个技巧。如何在浏览器被指示导航时检测页面或用户何时导航?
答案 0 :(得分:4)
请注意以下内容未记录。一些people say
,它适用于我(在Windows 7 64位,使用Internet Explorer 10),以检查 Flags
参数的神奇常量。如果Flags
事件的OnBeforeNavigate2
参数等于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的那部分是可怕的。