Genesis Vargas J

Como hacer un navegador web (Gecko/Firefox) en Visual Basic .NET

Comparte:

Hola amigos, en esta ocasión les voy a enseñar a programar un navegador web pero no como los demás que encuentras en la red que a decir verdad dejan mucho que desear ya que utilizan internet explorer, en éste vamos a utilizar el motor de reinderizado: GECKO, que es el que utiliza el famoso navegador Mozilla Firefox.

Lo primero que debemos hacer es descargar las dll's de GeckoFX para .NET, las cuales vamos a añadir como referencias en nuestro proyecto. No sobra decir que realizaremos este navegador con la version 22 de Mozilla Firefox ---> https://bitbucket.org/geckofx/geckofx-22.0/downloads, despues pasamos a descargar Xulrunner ---> http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/22.0/runtimes/.

*Importante: extraer todo el contenido de la carpeta xulrunner en la carpeta debug de nuestro proyecto, añadir referencia al proyecto escogiendo la dll Geckoxf-Core y también en el cuadro de herramientas hacer click derecho, elegir elementos, examinar y añadir la dll Geckofx-Winforms para tener el geckowebbrowser en el cuadro de herramientas. Por último importar estos espacios de nombres.

Imports Gecko
Imports System.Text.RegularExpressions

Desde aquí eres libre de hacer el diseño de tu navegador a tu gusto, no obstante a mi me quedó así:

Los códigos básicos del control GeckoWebbrowser son:

'Navegar url
GeckoWebBrowser1.Navigate("http://google.com")
'Actualizar Página
GeckoWebBrowser1.Reload()
'Detener Carga
GeckoWebBrowser1.Stop()
'Navegar Atras
GeckoWebBrowser1.GoBack()
'Navegar Adelante
GeckoWebBrowser1.GoForward()
'Mostrar código fuente de página
GeckoWebBrowser1.ViewSource()
'Mostrar propiedades
GeckoWebBrowser1.ShowPageProperties()

Y algunos métodos para el funcionamiento del navegador:

'en el evento load del formulario inicializamos xulrunner/xpcom, navegamos a cualquier pagina web y por último agregamos un procedimiento delegado que yo llame: LanzarDescarga(mas a bajo está) al evento Download de Gecko (para que hagamos descargas con el gestor que trae Gecko/Firefox)
 

Private Sub FrmNavegador_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Xpcom.Initialize()
        GeckoNavegador.Navigate("http://genesisvargasj.tk")
        AddHandler Gecko.LauncherDialog.Download, AddressOf LanzarDescarga
End Sub
'Cuando el documento esta completado (ha sido cargada la página)
'un condicional que valida si puede navegar hacia atras o hacia adelante, colocando el link del documento en la caja de texto y el titulo de la pagina en el texto del formulario

Private Sub GeckoNavegador_DocumentCompleted(ByVal sender As Object, ByVal e As System.EventArgs) Handles GeckoNavegador.DocumentCompleted
        Me.Text = "Genesis Navigator - " & GeckoNavegador.DocumentTitle
        TxtUrl.Text = GeckoNavegador.Document.Url.ToString()
        Me.Cursor = Cursors.Default
        GeckoNavegador.Cursor = Cursors.Default
        PnlNavegacion.Cursor = Cursors.Default
        If GeckoNavegador.CanGoBack = False Then
            BtnAtras.Enabled = False
        Else
            BtnAtras.Enabled = True
        End If
        If GeckoNavegador.CanGoForward = False Then
            BtnAdelante.Enabled = False
        Else
            BtnAdelante.Enabled = True
        End If
    End Sub
'procedimiento clave si queremos usar el gestor de descargas de gecko/firefox
Private Sub LanzarDescarga(ByVal sender As Object, ByVal e As Gecko.LauncherDialogEvent)

       Dim archivo As String = e.Filename
        Dim url As String = e.Url
        Dim fuente As nsIURI = IOService.CreateNsIUri(e.Url)
        Dim destino As nsIURI = IOService.CreateNsIUri(New Uri(My.Computer.FileSystem.SpecialDirectories.Temp + archivo).AbsoluteUri)
        Dim t As nsAStringBase = DirectCast(New nsAString(System.IO.Path.GetFileName(My.Computer.FileSystem.SpecialDirectories.Temp + archivo)), nsAStringBase)
        Dim persist As nsIWebBrowserPersist = Xpcom.CreateInstance(Of nsIWebBrowserPersist)("@mozilla.org/embedding/browser/nsWebBrowserPersist;1")
        Dim descargador = Xpcom.CreateInstance(Of nsIDownloadManager)("@mozilla.org/download-manager;1")
        Dim descarga As nsIDownload = descargador.AddDownload(0, fuente, destino, t, Nothing, 0, Nothing, DirectCast(persist, nsICancelable), False)
        If descarga IsNot Nothing Then
            persist.SetPersistFlagsAttribute(2 Or 32 Or 16384)
            persist.SetProgressListenerAttribute(DirectCast(descarga, nsIWebProgressListener))
            persist.SaveURI(fuente, Nothing, Nothing, Nothing, Nothing, DirectCast(destino, nsISupports), _
             Nothing)
        End If
        Dim ventana = Xpcom.GetService(Of nsIWindowWatcher)("@mozilla.org/embedcomp/window-watcher;1")
        ventana.OpenWindow(Nothing, "chrome://mozapps/content/downloads/downloads.xul", "Genesis Navigator - Descargas", "chrome,resizable=yes,hide", Nothing)
    End Sub

Observen esta captura del navegador en funcionamiento y obteniendo una buena calificación de soporte HTML5.

Bueno amigos, espero les siva este pequeño ejemplo ya que he visto muchos tutoriales en la red donde usan internet explorer como motor o peor aún usan skybound.gecko que es la versión 3 de Gecko/Firefox y por lo tanto esta desactualizada para el soporte HTML5. No te olvides de compartir este tutorial, de comentar y de seguirme en facebook, youtube, twitter y obviamente aquí en mi página web.

Adjunto el proyecto de Visual Studio 2010 en Visual Basic .NET.

   

Comentarios


genesis vargas

Soy Genesis Vargas Jiménez, autor de éste blog. Me gusta desarrollar software en todas las plataformas (web, móvil y desktop) y compartir conocimiento para ayudar a muchas personas.

Desde el 2015 soy MVP Microsoft en Visual Studio y tecnologías de desarrollo, reconocimiento que me enorgullece mucho.

MVP Genesis Vargas J

A PHP Error was encountered

Severity: Core Warning

Message: Module 'timezonedb' already loaded

Filename: Unknown

Line Number: 0

Backtrace: