Comunidad .NET de Cd. Juárez

Más que un foro virtual. Más que preguntas y respuestas. Somos una comunidad
que se ayuda para producir desarrolladores profesionales de alto rendimiento.
Welcome to Comunidad .NET de Cd. Juárez Sign in | Join | Help
in Search

Compilando el mundo

Manejando el navegador con una única instancia

En los últimos días se me ha planteado la necesidad de trabajar con el navegador web pero no incrustado dentro de nuestra aplicación sino de forma externa a ella. Además me interesaba trabajar con una única instancia del navegador de forma que cada vez que se quisiese visualizar una página nueva se recargase la instancia activa en ese momento.

El primer planteamiento que hice fue el siguiente:

using System;
using System.Windows.Forms;
using System.Diagnostics;

namespace ManejandoNavegador
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void buttonGo_Click(object sender, EventArgs e)
        {
            Process.Start("IEXPLORE.EXE", textBoxURL.Text);
        }

     }

}

Con esta solución cada vez que se visualizaba una página se lanzaba una nueva instancia del navegador, por lo tanto fue descartada.

Una segunda solución planteada es la que se muestra a continuación:

using System;
using System.Windows.Forms;
using System.Diagnostics;

namespace ManejandoNavegador
{
    public partial class Form1 : Form
    {
        Process navegador;
        public Form1()
        {
            InitializeComponent();
        }

        private void buttonGo_Click(object sender, EventArgs e)
        {
            if (navegador!=null)
            {
                navegador.Kill();
            }
            navegador= Process.Start("IEXPLORE.EXE", textBoxURL.Text);
        }

     }

}

Con esta solución conseguimos que solo haya una instancia del navegador gracias a que cada vez que lanzamos una instancia nueva se cierra la instancia anterior. Esto provoca cierto parpadeo al cerrar una instancia y lanzar otra nueva. Esto hizo que se descartara también esta ultima solución.

Finalmente decidí utilizar la siguiente solución añadiendo la referencia al COM Microsoft Internet Controls y añadiendo el “using SHDocVw”:

using System;
using System.Windows.Forms;
using System.Diagnostics;
using SHDocVw;

namespace ManejandoNavegador
{
    public partial class Form1 : Form
    {
        InternetExplorer explorer;
        public Form1()
        {
            InitializeComponent();
        }

        private void buttonGo_Click(object sender, EventArgs e)
        {
            if (explorer==null)
            {
                explorer= new InternetExplorer();
                explorer.Visible = true;
            }
            object Emtry = 0;
            explorer.Navigate(textBoxURL.Text, ref Emtry, ref Emtry, ref Emtry, ref Emtry);
        }
    }
}

De este modo se consiguió visualizar las páginas deseadas sobre una misma instancia del navegador. El usuario simplemente apreciará que la página se recarga con cada página nueva.

Published Thursday, July 02, 2009 3:47 AM by Compilando el mundo

Comments

No Comments
Anonymous comments are disabled
Powered by Community Server (Personal Edition), by Telligent Systems