我正在使用TWebBrowser
来显示一些HTML内容(本地)。应用程序被分成两半,上半部分有5个标签,下半部分是Web浏览器。浏览器的内容经常更改,例如当更改到不同的标签时。
显示的内容包括我需要阻止和停止每次点击的URL。我尝试使用事件OnBeforeNavigate2
,它检测点击的每个链接,但也检测我何时通过编程调用Navigate
。因此,它最终永远不会导航到任何地方。
我试着 Package 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;
尝试这个技巧没有运气。我怎么能检测到页面或用户导航的时间,而不是浏览器被指示导航的时间?
2条答案
按热度按时间t0ybt7op1#
请注意,以下是未记录的。一些
people say
和它的工作对我来说(在Windows 7 64位上,使用Internet Explorer 10)检查Flags
参数的 * 神奇常数 *。如果OnBeforeNavigate2
事件的Flags
参数等于64,则是用户在链接中导航。如果Flags
参数等于0,调用导航的是IWebBrowser2::Navigate
方法。在代码中,它将是:我不会感到惊讶,如果这只是无意中未记录的标志值,因为MSDN的这一部分是可怕的。
m528fe3b2#
我用这种方式来获得完整的URL加上哈希标签: