Delphi 6
我有通过本地HTML文件加载Webbrowser控件(TEmbeddedWB)的代码。它在大多数情况下都可以正常工作,并且有相当多的时间和1000个用户。
但是有一个特定的最终用户页面有一个脚本,可以执行某种 Google翻译的内容,这会让页面需要很长时间才能加载,超过65秒。
我正在尝试将网络浏览器停止/中止/退出,以便可以重新加载页面,以便应用可以退出。但是,我似乎无法阻止它。我试过停止,加载:空白,但它似乎没有停止。
wb.Navigate(URL, EmptyParam, EmptyParam, EmptyParam, EmptyParam );
while wb.ReadyState < READYSTATE_INTERACTIVE do Application.ProcessMessages;
应用程序在ReadyState循环(ReadyState = READYSTATE_LOADING)中保持相当长的时间,超过65秒。
有人有任何建议吗?
答案 0 :(得分:3)
如果您使用的是TWebBrowser
,那么TWebBrowser.Stop
或者您想要的IWebBrowser2.Stop
是适合此目的的正确功能。尝试做这个小测试,看看它是否停止导航到你的页面(如果导航需要更多约100毫秒当然:)
procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled := False;
WebBrowser1.Navigate('www.example.com');
Timer1.Interval := 100;
Timer1.Enabled := True;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if WebBrowser1.Busy then
WebBrowser1.Stop;
Timer1.Enabled := False;
end;
如果您正在谈论TEmbeddedWB
,请查看WaitWhileBusy
功能,而不是等待ReadyState
更改。作为唯一参数,您必须以毫秒为单位指定超时值。然后,您可以处理OnBusyWait
事件并在需要时中断导航。
procedure TForm1.Button1Click(Sender: TObject);
begin
// navigate to the www.example.com
EmbeddedWB1.Navigate('www.example.com');
// and wait with WaitWhileBusy function for 10 seconds, at
// this time the OnBusyWait event will be periodically fired;
// you can handle it and increase the timeout set before by
// modifying the TimeOut parameter or cancel the waiting loop
// by setting the Cancel parameter to True (as shown below)
if EmbeddedWB1.WaitWhileBusy(10000) then
ShowMessage('Navigation done...')
else
ShowMessage('Navigation cancelled or WaitWhileBusy timed out...');
end;
procedure TForm1.EmbeddedWB1OnBusyWait(Sender: TEmbeddedWB; AStartTime: Cardinal;
var TimeOut: Cardinal; var Cancel: Boolean);
begin
// AStartTime here is the tick count value assigned at the
// start of the wait loop (in this case WaitWhileBusy call)
// in this example, if the WaitWhileBusy had been called in
// more than 1 second then
if GetTickCount - AStartTime > 1000 then
begin
// cancel the WaitWhileBusy loop
Cancel := True;
// and cancel also the navigation
EmbeddedWB1.Stop;
end;
end;