GARANTIR DESCONTO

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.
Luiz Bergamo

Luiz Bergamo

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:

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

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
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar