Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-08-2004
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
NULL
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.598
Poder: 20
Delphius Va camino a la fama
Unhappy Como detectar la URL de una "página nueva"

¡Hola a todos los amantes de Delphi y la programación!

Disculpen si estoy repitiendo la pregunta... pero ¿Alguien sabe cómo detectar la URL de destino cuando hace "abrir en una nueva ventana"?
Se que en Delphi existe el procedimiento NewWindow2 y que mediante éste se crea la ventana IE con dicha URL...
Mi duda: ¿ existe alguna manera de detectar dicha URL antes de que se "cree" la ventana de IE ?

Desde ya... muchas gracias
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #2  
Antiguo 04-08-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.234
Poder: 10
roman Tiene un aura espectacularroman Tiene un aura espectacular
¿Te refieres a la componente TWebBrowser? De ser así, viendo la lista de eventos podría interesarte el evento OnBeforeNavigate que te pasa la URL de la página a la que se desea navegar y puedes incluso cancelar la operación si lo deseas.

// Saludos
Responder Con Cita
  #3  
Antiguo 06-08-2004
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
NULL
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.598
Poder: 20
Delphius Va camino a la fama
Unhappy Evento OnBeforeNavigate ?

Disculpa... pero tengo entendido que el evento OnBeforeNavigate se dispara cuando se navega dicha página... y yo necesito detectar no la página actual... sino la destino (la que se desea navegar en una nueva ventana o porque el link es en una nueva página) antes de que se abra la ventana de IE.
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #4  
Antiguo 06-08-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.234
Poder: 10
roman Tiene un aura espectacularroman Tiene un aura espectacular
He estado dándole vueltas a tu pregunta y he llegado a algunos resultados.

Cuando un enlace abre una nueva ventana, antes de mostrarla genera el evento OnNewWindow2 al término del cual se crea la nueva instancia de IE vacia. Después de ello se generaría el evento OnBeforeNavigate2 en donde podrías determinar si permites o no la navegación. El punto es que en las condiciones por defecto, este evento no lo recibes ya que quien lo recibe es la nueva instancia de IE que ya no reside en tu apicación sino en una ventana de IE.

La forma en que podrías solucionar esto es cambiando tales condiciones por defecto, es decir, forzar a que la nueva ventana sea de tu aplicación y no de IE. Para ello, en el evento OnNewWindow2 pondrías:

Código Delphi [-]
with TForm1.Create(nil) do
  ppDisp := WebBrowser1.Application;

De esta forma el enlace se abre en una nueva instancia del browser que reside en una nueva instancia de Form1. Y ahí si puedes usar el evento OnBeforeNavigate2:

Código Delphi [-]
if SePuedeAbrir
  then Show
  else Close;

En el evento OnClose del formulario pones

Código Delphi [-]
Action := caFree

para que se liberen las nuevas instancias que se abran.

Seguramente hay que afinar detalles pero tal como está me ha funcionado bien.

// Saludos
Responder Con Cita
  #5  
Antiguo 08-08-2004
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
NULL
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.598
Poder: 20
Delphius Va camino a la fama
Wink Eso es lo que quería ... pero ...

Gracias Roman!,
Funciona bien.. hay que agregarle algunas que otras cositas pero anda.
Eso es lo que necesitaba... pero la verdad es que tengo un problema: quiero llevar esto a un programa que estoy desarrollando: un multinavegador y hasta el momento no he logrado agregar dicha funcionalidad.
Funciona todo OK siempre y cuando se trate de un formulario principal, pero el inconveniente que tengo es que mi navegador es un frame. Y voy creando frames navegadores dinámicamente (a c/u los coloco en un TTabSheet diferente que tambien creo dinamicamente)

¿Habria manera de pasarlo al frame?... para una mejor ayuda ve el hilo anterior que había creado http://www.clubdelphi.com/foros/showthread.php?t=12252 Allí tienes el código de cómo genero todo lo anterior.

Mi objetivo es que cuando se haga clic en "nueva ventana" realmente se cree una pestaña con su correspondiente frame navegador y dicho enlace.

Estuve pensando en hacer que llame al evento del botón (que se encarga de hacer las pestañas y los frames) pero esto generaría una referencia cicular y Delphi no lo permite: ¡La unidad principal hace uso de la del frame y la del frame debería hacer uso de la principal! ¿Cómo solucionar esto?

El problema sería el código que tu enviaste:
Código Delphi [-]
with TForm1.Create(nil) do
  ppDisp := WebBrowser1.Application;

Se que es complicado hacer lo que pretendo, pero no imposible
Desde ya muchas gracias...
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #6  
Antiguo 10-08-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.234
Poder: 10
roman Tiene un aura espectacularroman Tiene un aura espectacular
Cita:
Empezado por Delphius
pero esto generaría una referencia cicular y Delphi no lo permite: ¡La unidad principal hace uso de la del frame y la del frame debería hacer uso de la principal! ¿Cómo solucionar esto?
¿Cómo vas con esto?

Observa que las referencias circulares no se permiten cuando las unidades se incluyen en la sección interface. Pero en este caso se puede solucionar fácilmente ya que puedes hacer lo que deseas añadiendo una de las unidades o ambas en la sección implementation.

// Saludos
Responder Con Cita
  #7  
Antiguo 10-08-2004
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
NULL
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.598
Poder: 20
Delphius Va camino a la fama
Thumbs up Ya me di cuenta...

Gracias Roman. Ya lo logré.. estuve intentando mucho tiempo cómo evitar esa referencia cuando se me dio la loca idea de probarlo en implementation, resolví esto antes de recibir tu respuesta!...
¡Funciona!...
Gracias, me fuiste de mucha ayuda.
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 13:38:59.


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