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