Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ¿Detectar HTTP 404 (página no encontrada) en un TWebBrowser? (https://www.clubdelphi.com/foros/showthread.php?t=57126)

Black_Ocean 06-06-2008 00:06:03

¿Detectar HTTP 404 (página no encontrada) en un TWebBrowser?
 
Hola amigos,

Nuevamente, me veo en un problema =) Y eso es lo entretenido de este mundo de la programación, se soluciona uno pero llega otro :=)

Bueno... el problema de fondo es que no logro detectar en el TWebBrowser cuando la página especificada en el método Navigate no existe (error 404). Cuando pruebo las propiedades LocationURL y LocationName sólo muestra la URL anterior especificada en Navigate, no la URL o el archivo donde es redireccionado el navegador cuando se genera el HTTP 404. He probado todos los Eventos con estas propiedades y no logro obtener lo que necesito. Como el TWebBrowser está basado completamente en Internet Explorer, supongo que debe existir un método para detectar esto desde Delphi.

Estuve investigando en Google acerca de esto y sólo tengo dos posibles pistas, que son la función QueryStatusWB y la variante OleObject del TWebBrowser, cuya ayuda en Delphi dice lo siquiente (QueryStatusWB):

Código:

Returns information about what commands the Web browser supports.

Delphi syntax:

function  QueryStatusWB(cmdID: OLECMDID): OLECMDF;

Description

Use QueryStatusWB to determine what commands can be executed using the ExecWB method. QueryStatusWB uses the QueryStatus method of the IOleCommandTarget interface to obtain information about the status of commands. For more information, see the Microsoft documentation of IOleCommandTarget.

cmdID specifies the command about which you want information.

QueryStatusWB returns a value made by adding together flags that indicate the status of the command.

Pero no logro entender como hacer algo con esta función, si es que realmente sirve para lo que necesito.

¿Alguien me puede echar una manito =)?

De antemano, muchas gracias y saludos.

roman 06-06-2008 03:33:25

Usa el evento NavigateError del WebBrowser:

Código Delphi [-]
procedure TForm1.WebBrowser1NavigateError(ASender: TObject;
  const pDisp: IDispatch; var URL, Frame, StatusCode: OleVariant;
  var Cancel: WordBool);
begin
  if StatusCode = 404 then
    ShowMessage('Error 404');
end;

Sólo hay un pequeño problema. Al menos en Delphi 7, el TWebBrowser no tiene este evento :D

No estoy seguro, pero al parecer este evento apareció en IE6 y supongo que Delphi7 es anterior por lo que al importar el control ActiveX no lo publica.

Lo que he hecho es instalar manualmente el control ActiveX yendo al menú Component|Import ActiveX Control. En la lista buscas "Microsoft Internet Controls" e instalas el control.

En la paleta ActiveX me aparecieron dos controles: WebBrowser_V1 y WebBrowser. El bueno es el WebBrowser y ése ya trae el evento NavigateError.

// Saludos

Black_Ocean 06-06-2008 04:54:56

Muchas gracias estimado roman, ya he solucionado el asunto gracias a ti. Era justamente lo que necesitaba. Toda tu explicación es correcta y justamente como acabo de leer en Internet ese evento no viene en el WebBrowser de Delphi 7 porque la librería SHDocVw que usaba no estaba implementada en ese tiempo.

Cordiales saludos y nuevamente, gracias colega :=)


La franja horaria es GMT +2. Ahora son las 23:49:47.

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