PDA

Ver la Versión Completa : TWebBrowser saber cuando se cargo la pagina


ivan022481
05-05-2006, 06:14:17
Hola a todos, desde antemano gracias por la lectura de mi problema que paso a describir: estoy haciendo una aplicacion la cual carga en un TWebBrowser una pagina 'X', una vez cargada, se extrae en un TRichEdit el codigo fuente de la misma, una vez extraido, la aplicacion tiene que buscar otra pagina, una vez que se cargo a toda, volver a bajar el codigo fuente de la misma, esta operacion de que cuando termina de bajar la controlo con el evento OnDownloadComplete del TWebBrowser, que tiene un detalle, cuando la pagina contiene marcos (o frames) se ejecuta este evento tantas veces la pagina contenga marcos y mientras se cargan los frames la pagina no termina de descargarse completa en el tWebBrowser, y a todo esto se genera un error. Lo que necesitaria sabes es como hacer para detectar cuando se cargo la pagina con sus marcos y una vez cargada la misma. Desde ya muchas gracias.

roman
05-05-2006, 08:02:24
En la ayuda de Delphi viene un ejemplo que explica esto. Según entiendo, básicaente tienes que jugar con NavigateComplete y DocumentComplete. En NavigateComplete guardas una referencia al parámetro IDispatch que pasa y cada vez que recibes el evento DocumentComplete comparas la referencia con el propio parámetro IDispatch de DocumentComplete. Según el ejemplo, sólo coincidirán cuando DocumentComplete se lance porque ya se cargaron todos los marcos.

// Saludos

BadB0Y
14-05-2006, 01:48:50
Creo que este enlace te puede servir:

http://www.marteens.com/trick52.htm

;)

saludos

ivan022481
14-05-2006, 02:07:44
Si, gracias, de echo, desde ese ejemplo descubri que el lio viene de los frames, pero lamentablemente no me sirvio mucho, por ahora lo que estoy haciendo es una pausa en la ejecucion de un procedimento "CargarPagina" creado "a mano" , la pausa es de unos 3 segundos y asi cargo la pagina, si encuentro algo mejor lo posteo aca, gracias.

roman
14-05-2006, 20:09:37
¿Y qué pasó con la sugerencia que te pasé? ¿No valió ni un comentario?

mazinger
15-05-2006, 00:27:54
El siguiente código te permite saber cuando se termina de cargar totalment un página:



procedure TForm1.NavegadorDocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin

if (pDisp = CurDispatch) then
begin
CurDispatch := nil; {clear the global variable }
end;

end;


procedure TForm1.NavegadorNavigateComplete2(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
if CurDispatch = nil then
CurDispatch := pDisp;
end;

ivan022481
15-05-2006, 01:19:31
Roman: lo implemente, pero se disparo varias veces y eso era lo que quiero evitar, por ahora implemente esa "solucion" obvio que no es la adecuada, sigo buscando la manera correcta, gracias por el interes.

mazinger
15-05-2006, 22:36:02
Sigue buscando si quieres, pero la respuesta la tienes más arriba.
O bien no he entendido lo que necesitas...

roman
16-05-2006, 01:12:28
Y más arriba todavía ya que es el mismo código que viene en la ayuda de Delphi y que le indiqué desde un principio. Así que posiblemente la ayuda esté equivocada y no funcione la técnica. Veré si más tarde puedo probarlo.

// Saludos

mazinger
18-05-2006, 01:43:38
Si que funciona, de hecho la utilizo en mi programa.

Insomne
14-06-2006, 23:56:49
Hola :)

Tu pregunta es antigua, pero por ai acaso te mando un codigo del evento OnDocumentComplete que pille por ahi. Funciona con marcos tambien.
Un saludo.


procedure TForm1.Wb1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OLEvariant);
var
CurWebrowser : IWebBrowser;
TopWebBrowser: IWebBrowser;
Document : OLEvariant;
WindowName : string;
begin { TForm1.WebBrowser1DocumentComplete }
CurWebrowser := pDisp as IWebBrowser;
TopWebBrowser := (Sender as TWebBrowser).DefaultInterface;
if CurWebrowser=TopWebBrowser then
begin
ShowMessage('Document is complete.');
FCambiandoDePag := FALSE;
end
else
begin
Document := CurWebrowser.Document;
WindowName := Document.ParentWindow.Name;
ShowMessage('Frame ' + WindowName + ' is loaded.')
end;
end;

ivan022481
15-06-2006, 16:21:02
Muchas gracias, lo estoy probando

vinagre3ro
17-06-2006, 19:16:32
Hola a todos, amigo, he leido tu pregunta y te agradeceria mucho, si me pudieras indicar como hacer para obtener el codigo fuente y guardarlo en memo o en un textricht soy nuevo con el webbrowser y no se donde lo guarda ni como obtenerlo te lo agradeceria mucho, gracias de antemano. adios.

Insomne
19-06-2006, 22:36:42
Hola :)


// para recuperar el contenido del body en un TMemo
Memo1.Text := WebBrowser1.OleObject.Document.Body.InnerHTML;

// para recuperar el texto del documento en un TMemo
Memo1.Text := WebBrowser1.OleObject.Document.Body.InnerText;


un enlace bueno para investigaciones con el webbrowser:

http://www.cryer.co.uk/brian/index.htm

Un saludo