TWebBrowser Delphi - Aguardar conclusão da solicitação
Caros,
Estou utilizando TWebBrowser e preciso enviar comandos em sequencia, porém aguardar a conclusão de cada um.
A pagina possui AJAX e SCRIPT'S e só posso enviar o próximo comando após estes eventos.
Terei que criar eventos NavigateComplete2 ou DocumentComplete em tempo de execução já que os eventos de complete são diferentes após cada chamada?
Algum exemplo?
Obrigado.
Estou utilizando TWebBrowser e preciso enviar comandos em sequencia, porém aguardar a conclusão de cada um.
A pagina possui AJAX e SCRIPT'S e só posso enviar o próximo comando após estes eventos.
Terei que criar eventos NavigateComplete2 ou DocumentComplete em tempo de execução já que os eventos de complete são diferentes após cada chamada?
Algum exemplo?
Obrigado.
Luiz Bergamo
Curtidas 0
Melhor post
Mateus Ribeiro
24/06/2016
Bom dia amigo!
Segue uma solução que usei a um tempo atrás, trabalhando com 3 eventos do browser:
Agora por exemplo, para esperar o WebBrowser terminar de carregar o navigate se usa assim:
Espero que seja isso, boa sorte!
Segue uma solução que usei a um tempo atrás, trabalhando com 3 eventos do browser:
TForm1 = class(TForm)
private
CurDispatch: IDispatch;
FDocLoaded: Boolean;
....
procedure TForm1.WebBrowser1BeforeNavigate2(ASender: TObject; const pDisp: IDispatch;
const URL, Flags, TargetFrameName, PostData, Headers: OleVariant;
var Cancel: WordBool);
begin
CurDispatch := nil;
FDocLoaded := False;
end;
procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject; const pDisp: IDispatch;
const URL: OleVariant);
begin
if (pDisp = CurDispatch) then
begin
FDocLoaded := True;
CurDispatch := nil;
end;
end;
procedure TForm1.WebBrowser1NavigateComplete2(ASender: TObject; const pDisp: IDispatch;
const URL: OleVariant);
begin
if CurDispatch = nil then
CurDispatch := pDisp;
end;
Agora por exemplo, para esperar o WebBrowser terminar de carregar o navigate se usa assim:
WebBrowser1.Navigate('www.devmedia.com.br');
repeat Application.ProcessMessage until FDocLoaded;
Espero que seja isso, boa sorte!
GOSTEI 1
Mais Respostas
Luiz Bergamo
23/06/2016
Mateus, Obrigado pela ajuda.
Funcionou para a maioria dos comandos, porém alguns edit's e listbox possuem onchange.
Chamo o onchange da seguinte forma:
WebBrowser1.OleObject.Document.all.Item('formTemplate:j_id28', 0).onchange;
repeat Application.ProcessMessages until FDocLoaded;
ele não respeita o onchange do objeto que por exemplo é popular outro listbox
O envento desta chamada é:
<input type="text" name="formTemplate:j_id28" maxlength="8" onchange="Richfaces.showModalPanel('popuprogress');;A4J.AJAX.Submit('formTemplate',event,{'similarityGroupingId':'formTemplate:j_id29','parameters':{'formTemplate:j_id29':'formTemplate:j_id29'} } )" size="25" tabindex="0">
Devo chama-la de outra forma ou temos que analisar outro evento do webbrowser?
Obrigado.
Luiz
Funcionou para a maioria dos comandos, porém alguns edit's e listbox possuem onchange.
Chamo o onchange da seguinte forma:
WebBrowser1.OleObject.Document.all.Item('formTemplate:j_id28', 0).onchange;
repeat Application.ProcessMessages until FDocLoaded;
ele não respeita o onchange do objeto que por exemplo é popular outro listbox
O envento desta chamada é:
<input type="text" name="formTemplate:j_id28" maxlength="8" onchange="Richfaces.showModalPanel('popuprogress');;A4J.AJAX.Submit('formTemplate',event,{'similarityGroupingId':'formTemplate:j_id29','parameters':{'formTemplate:j_id29':'formTemplate:j_id29'} } )" size="25" tabindex="0">
Devo chama-la de outra forma ou temos que analisar outro evento do webbrowser?
Obrigado.
Luiz
GOSTEI 0