Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   El WebBrowser no se cierra (https://www.clubdelphi.com/foros/showthread.php?t=33648)

Novás 12-07-2006 23:24:07

El WebBrowser no se cierra
 
Saludos a todos los foristas:

Me he visto en la obligación de tener de desarrollar un explorador web para visualizar una página web, al mostrar esa página web en el componente WebBrowser todo funciona correctamente... peeeeeeeerooooooooo.

La página web que muestro tiene un botón (cerrar) que se supone cierra el explorador web, cuando yo lo pulso el formulario me aparece vacío, sin ningún contenido pero no se cierra.

He probado a usar los eventos OnQuit y OnExit del TWebBrowser y poner un self.Close e incluso un Application.Terminate pero esas líneas no llegan a ejecutarse nunca.

Que tengo que hacer para que al pulsar el botón de la página web mi aplicación se cierre.

Desde ya muchas gracias

dec 12-07-2006 23:35:30

Hola,

Yo lo intentaría con el evento "OnBeforeNavigate2" del "TWebBrowser". Este cuenta con un parámetro de nombre "URL" que tal vez pudieras aprovechar para lo que te es menester. Échale un vistazo y cuentas qué tal te fue. ;)

O sea, imagino algo así:

Código Delphi [-]
procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
begin
  if (URL = 'algo-que-identifica-que-se-quiere-cerrar') then
    Self.Close;
end;

Novás 13-07-2006 00:06:48

He probado a poner lo siguiente:

Código Delphi [-]
procedure TFrmPrincipalExplorer.WebBrowser1BeforeNavigate2(Sender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
begin
  if (URL = 'https://recargas.alphyra.es/recargasWeb/') then
    Self.Close;
end;

En URL no tengo muy claro que tengo que poner y he puesto la url de la página por lo cual así la página ya no llega a mostrarse. Al poner la URL en blanco tampoco se cierra la página y el problema se mantiene.

Si conoces alguna solución para el componente TEmbeddedWB también me sirve. Muchas gracias

dec 13-07-2006 00:20:51

Hola,

Bueno. Mi idea era aprovechar el parámetro URL para ver si de ese modo podías averiguar que el usuario había pulsado en el botón "cerrar" situado en el documento HTML cargado en el "TWebBrowser".

O sea. Tú carga el documento en cuestión en el "navegador". En el evento mencionado anteriormente escribe algo así:

Código Delphi [-]
procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
begin
  Caption := URL;
end;

No lo he comprobado, pero, tal vez al utilizar el botón "cerrar" del documento HTML en la variable "URL" tengas algo como "javascript:window.close()", o "algo", en definitiva, que te permitiera averiguar que se pulsó el botón de marras y pudieras a su vez cerrar el programa, ¿porque de eso se trataba no?

O sea, suponiendo que lo que digo funcione, y te encuentres algo como lo dicho en la variable URL, podrías codificar algo como esto:

Código Delphi [-]
procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
begin
  if (URL = 'javascript:window.close()') then
    Self.Close;
end;

No sé si es que no te funciona, o no lo has probado, o no me explico bien, o qué... no tengo el componente que dices instalado, aunque sería cuestión de minutos instalarlo, porque lo guardo por aquí. Tal vez, efectivamente, el componente que dices dé más juego que el "TWebBrowser original", pero, tal vez no te haga falta, no sea necesario... no sé.

Edito: ¿No tienes acceso al documento HTML de que estamos hablando, verdad? Es decir, no puedes editarlo según te parezca. ¿O sí? Lo digo porque de ese modo la cosa sería más sencilla, me parece. De todas maneras he hecho algunas pruebas y no parecen dar muy buenos resultados... así, a bote pronto...

Novás 13-07-2006 00:44:59

Gracias dec, tu solución no sirve para este caso dada que la URL de la página que aparece al final, al pulsar el botón cerrar es la misma que ya aparece en pasos anteriores.

Por otro lado el componente que he citado antes tiene un evento, OnCloseQuery que me ha funcionado a la perfección.

Muchísimas gracias por tomarte un tiempo para contestar, gente como tú es la que hacen de este portal un sitio maravilloso.

dec 13-07-2006 01:31:42

Hola,

Las pruebas que yo realizé tampoco fueron del todo óptimas, ya lo dije. Sin embargo, por otro motivo: desde el propio documento HTML se lanzaba el diálogo "¿Quieres cerrar esta ventana?"... e hiciera lo que hiciera (cancelar o no dicho diálogo) el programa se cerraba fatalmente...

Pero, en fin. Me alegro que lo solucionaras. Yo sólo quería añadir un enlace a la página Web en donde encontrar el componente. :)

Edito: por cierto, que la página Web que enlazo me la encuentro cambiada desde la última vez que la visité. Parece que hay novedades además. :)


La franja horaria es GMT +2. Ahora son las 19:06:51.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi