Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

CppWebBrowser no abrir internet explorer
Ir a página 1, 2  Siguiente
 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: CppWebBrowser no abrir internet explorer Responder citando

Hola gente, estoy haciendo un navegador con CppWebBrowser y cuando hago click en un enlace con target="_blank", me abre Internet Explorer, yo quiero que en lugar de abrir Internet Explorer en una nueva ventana, abra nuevamente mi browser con la nueva url.

Desde ya muchas gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Si lo que deseas es que se abra en una nueva instancia del Form, podrías usar algo como lo siguiente en el evento OnNewWindow2 del TCppWebBrowser:
Código:
    TForm1* frm = new TForm1(0);
    frm->CppWebBrowser1->RegisterAsBrowser = true;
    *ppDisp = frm->CppWebBrowser1->Application;
    frm->Show();
      // Recuerda liberar la memoria al cerrar el Form,
      // por ejemplo en el evento OnClose usando: Action = caFree;

O bien, si quieres que la nueva página se abra en la misma ventana que ya estas usando, pondríamos lo siguiente en el evento OnNewWindow2:
(Este mismo código cambiando solo una línea podríamos usarlo para lanzar nuestro ejecutable con la nueva URL como parámetro)
Código:
    // La estructura siguiente crea un TCppWebBrowser oculto,
    // que captura la url y la redirecciona al navegador principal
    static struct LOCAL {
        LOCAL(TCppWebBrowser* w): wbMain(w)
        {
            wb = new TCppWebBrowser(Application);
            wb->OnBeforeNavigate2 = BeforeNavigate2;
        }
        void __fastcall BeforeNavigate2(TObject *Sender, LPDISPATCH pDisp,
            VARIANT* URL, VARIANT* Flags, VARIANT* TargetFrameName,
            VARIANT* PostData, VARIANT* Headers, VARIANT_BOOL* Cancel)
        {
            *Cancel = VARIANT_TRUE;
            wbMain->Navigate2(URL, Flags, 0, PostData, Headers);
            // Aquí como alternativa podríamos llamar a nuestro ejecutable
            // y pasarle la URL si queremos que se ejecute como otro proceso
        }
        TCppWebBrowser *wb, *wbMain;
    } local(CppWebBrowser1);
    *ppDisp = local.wb->Application;
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: No se como hacerlo Responder citando

Hola Leo, mil gracias por tu respuesta, he intentado insertar el codigo pero desconozco como implementarlo en el evento, podrias mostrarnos como se hace?.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Verguenza me deberia de dar Responder citando

Jeje.. perdon por esa pregunta tonta... no sabia que haciendo doble click al lado del evento me creaba la funcion.

Muchas gracias el codigo funciona de maravilla
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

hola leo.....puedes poner un ejemplo de como hacer que se abra en la misma ventana del CppWebbrowser las paginas que abre separadamente en internet explorer para RAD STUDIO 10.x ???? es que me da error ese codigo

[bcc32c Error] Unit1.cpp(1): ICE: Internal compiler error: 0 @ 00000000
En RAD Studio 10.3.1
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

En las versiones actuales es mucho más sencillo, en vez de usar el evento OnNewWindow2, usamos OnNewWindow3 y ponemos las siguientes líneas:
Código:
*Cancel = VARIANT_TRUE;
static_cast<TCppWebBrowser*>(Sender)->Navigate(bstrUrl);
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

gracias por estar ahi..... voy a probarlo ahora mismo y te cuento

funcionar parece que funciona "algo" y te cuento...... abro esta direccion:

Código:
   
TVariant ADDRESS = "https://events.secondlife.com/";
  CppWebBrowser1->Navigate2(ADDRESS);


abre la pagina....hasta ahi bien....luego esa pagina...tiene una serie de links de "DONDE" que referencian a un lugar de second life game....si clickeas carga en la misma pagina un box arriba llamado "EVENTO SELECCIONADO" y pone dentro un link..... en 2 horas en LINK AQUI. <--y ese link le doy y no hace nada

es un link similar a este:

Código:
secondlife:///app/region/Firestorm%20Aerodrome/65/182/24


es de suponer que deberia abrir la localizacion en 2nd Life viewer pero no lo hace ni muestra el mapa ni nada quiza por el codigo que me has dado habria que discriminar si es "secondlife://" y no aplicar que abra en la misma ventana cuando sea de este tipo???
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Esto no tiene nada que ver con lo de arriba, incluso sin usar lo de arriba te pasaría igual.

Puedes interceptar los enlaces con "secondlife:///" probando con lo siguiente en OnBeforeNavigate2:
Código:

if (VarToStr(*URL).Pos("secondlife:///") == 1)
{
   *Cancel = VARIANT_TRUE;
   ShellExecute(0, TEXT("open"), *URL, 0, 0, SW_SHOWNORMAL);
}
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

vale yo lo hice asi

Código:
void __fastcall TForm1::CppWebBrowser1NewWindow3(TObject *Sender, LPDISPATCH *ppDisp,
        VARIANT_BOOL *Cancel, unsigned_long dwFlags, BSTR bstrUrlContext,
        BSTR bstrUrl)
{


  if(Browser_Flag == true)
   {
    *Cancel = VARIANT_TRUE;
   static_cast<TCppWebBrowser*>(Sender)->Navigate(bstrUrl);
   }
}
//---------------------------------------------------------------------------



void __fastcall TForm1::CppWebBrowser1BeforeNavigate2(TObject *Sender, LPDISPATCH pDisp,
        Variant *URL, Variant *Flags, Variant *TargetFrameName, Variant *PostData,
        Variant *Headers, VARIANT_BOOL *Cancel)
{
    AnsiString Addr;
   Addr = URL->AsType(varString);

   wchar_t *str = new wchar_t[Addr.WideCharBufSize()];

   if (Addr.Pos("secondlife:") > 0)
    {  ShowMessage("ENCONTRADO");
      Browser_Flag = false;
      //::ShellExecute(NULL, L"open", str, NULL, NULL, SW_SHOWNORMAL);
    }
   else Browser_Flag = true;



}
//---------------------------------------------------------------------------


tu has hecho una version bastante mas optimizada.....crees que el shellexecute es necesario para digamos "lanzar" la url hacia el 2nd Life Viewer??
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Con ShellExecute dejas que sea el shell quien se encargue de lanzar la aplicación que corresponda, en este caso el visor de 2ndLife habrá registrado el protocolo "secondlife:" y el shell sabrá quien tiene que abrirlo. Eso no impide que si te quieres complicar más la vida y hacer algo para lanzarlo por tu cuenta puedas hacerlo, aunque lo veo innecesario..
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

si, ...si lo lanza el shell esta bien..... lo mirare mas a fondo porque ahora estuve mirando de lanzar esos enlaces "secondlife" y me salio precisamente lo que tu dices, la ventanita de Asociacion al Shell para saber con que programa queria asociarlos......
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

No uso 2ndLife, pero acabo de hacer una prueba con otro protocolo "magnet:" y tanto usando ShellExecute, como incluso sin usarlo, el propio TCppWebBrowser lo lanza si esta registrado el protocolo correspondiente.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

hola Leo.... perdona que te moleste pero a mi no me funciona esto ultimo que dices.....recorre el codigo pero al llegar al ShellExecute no hace nada

es en mi app porque desde el firefox funciona perfectamente....abre la ventana de destination en el second life
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Lo que quería decir arriba es que estamos mezclando problemas, el problema no tiene nada que ver con este código, ni con el TCppWebBrowser en sí, que mandara al Shell cualquier enlace que tenga registrado su asociación de protocolo. No se la razón por la que las aplicaciones de secondlife no lo han registrado globalmente sino dentro del Firefox.

Fíjate dentro de las "Opciones" de Firefox, en la primera página debajo de "Aplicaciones" aparecen las asociaciones registradas en el propio Firefox, busca ahí a donde, a que aplicación envía el enlace, y tienes dos opciones, una registrar tú mismo manualmente el protocolo URL en el registro bajo "HKEY_CLASSES_ROOT\secondlife" o bien una vez que sabes a que aplicación envía el enlace simplemente antes de llamar a ShellExecute recorta la primera parte de la URL "secondlife://" y llama ahí a la aplicación correspondiente y usa la URL con el inicio recortado como parámetro.

Una forma sencilla de probar estos enlaces es usar Ejecutar del sistema (tecla WIN+R) y copia y pega ahí el enlace ese de secondlife, si desde ahí te falla, también te va a fallar desde Internet Explorer o desde ShellExecute, y eso quiere decir que no está registrado. Desconozco la razón por la que los de secondlife no lo registran para todo el sistema, al principio pensé que sería porque tenían su propio navegador dentro de la aplicación, pero si dices que te funciona en Firefox entonces solo se me ocurre que lo hayan registrado dentro de Firefox en el apartado que te decía.

Cualquier cosa si no consigues hacerlo funcionar, pega por aquí lo que veas en el apartado de Firefox que te digo y te pongo el código de cómo usarlo o de como registrar tú el protocolo manualmente.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

de acuerdo..... voy a ponerme con ello hoy otra vez y probar eso del EJECUTAR de windows.......creo que en Firefox esta registrado porque lo mire en los protocolos de archivos de las opciones ....pero puede que sea en el IE donde tendria que estar registrado mas bien..... bueno...en unos minutos te cuento..... probare lo de recortar "secondlife:///"
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.