Fórum TWebBrowser Delphi - Aguardar conclusão da solicitação #558568
23/06/2016
0
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
Curtir tópico
+ 0
Responder
Post mais votado
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!
Mateus Ribeiro
Responder
Gostei + 1
Mais Posts
24/06/2016
Luiz Bergamo
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
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)