¿Hay alguna forma relativamente fácil de insertar un navegador moderno en una aplicación .NET?
Por lo que entiendo, el WebBrowser
control es un contenedor para IE , lo que no sería un problema, excepto que parece que es una versión muy antigua de IE , con todo lo que implica en términos de errores CSS, riesgos potenciales de seguridad (si el motor de renderizado no fue parcheado, ¿realmente puedo esperar que se solucionen los problemas de desbordamiento del búfer de zillion?), y otros problemas.
Estoy usando Visual Studio C # (edición express, ¿hace alguna diferencia aquí?)
Me gustaría integrar un buen navegador web en mis aplicaciones. En algunos, solo lo uso para manejar el proceso de registro de usuarios, interactuar con algunas de las características de mi sitio web y otras cosas de ese orden, pero tengo otra aplicación en mente que requerirá más err ... control.
Necesito:
- Un navegador que puede integrarse dentro de una ventana de mi aplicación (no una ventana separada)
- Un buen soporte para CSS, js y otras tecnologías web, a la par con cualquier navegador moderno
- Funciones básicas del navegador como "navegar", "regresar", "recargar" ...
- Acceso liberal al código de página y salida.
Estaba pensando en Chrome, ya que viene bajo la licencia BSD, pero estaría tan contento con una versión reciente de IE.
En la medida de lo posible, me gustaría mantener las cosas simples. Lo mejor sería si uno pudiera parchear el WebBrowser
control existente , que ya representa aproximadamente el 70% de lo que necesito, pero no creo que sea posible.
He encontrado un control activeX para Mozilla ( http://www.iol.ie/~locka/mozilla/control.htm ) pero parece que es una versión antigua, por lo que no es necesariamente una mejora.
Estoy abierto a sugerencias
fuente
WebBrowser
control alojado usa la emulación IE7, a menos que se indique lo contrario conFEATURE_BROWSER_EMULATION
. Esto se documenta aquí: blogs.msdn.com/b/askie/archive/2009/03/23/…Respuestas:
Pedido CefSharp .Net fijaciones, un proyecto que empecé hace un tiempo que por suerte fue recogida por la comunidad y se convirtió en algo maravilloso.
El proyecto envuelve el Chromium Embedded Framework y se ha utilizado en varios proyectos importantes, incluido el cliente de Windows de Rdio, Facebook Messenger para Windows y Github para Windows.
Cuenta con controles de navegador para WPF y Winforms y tiene toneladas de características y puntos de extensión. Al estar basado en el cromo, también es increíblemente rápido.
Agarrarlo de NuGet:
Install-Package CefSharp.Wpf
oInstall-Package CefSharp.WinForms
Vea ejemplos y dé su opinión / comentarios / solicitudes de extracción: https://github.com/cefsharp/CefSharp
BSD con licencia
fuente
Chrome usa (un tenedor de) Webkit si no lo sabía, que también utiliza Safari. Aquí hay algunas preguntas que son de la misma línea:
El webkit uno no es genial como dice la otra respuesta, una versión ya no funciona (el código de google) y la Mono es experimental. Sería bueno que alguien hiciera el esfuerzo de hacer un contenedor .NET decente para él, pero no es algo que nadie quiera hacer, lo cual es sorprendente dado que ahora tiene soporte para HTML5 y tantas otras características que IE (8 ) falta motor.
Actualización (2014)
Hay un nuevo proyecto de doble licencia que le permite incrustar Chrome en sus aplicaciones .NET llamado Awesomium . Viene con una API .NET pero requiere bastantes hacks para renderizar (los ejemplos dibujan la ventana del navegador en un búfer, pintan el búfer como una imagen y se actualizan en un temporizador).
Creo que este es el navegador utilizado por Origin en Battlefield 3.
Actualización (2016)
Ahora existe DotnetBrowser , una alternativa comercial a Awesomium. Está basado en cromo.
fuente
He estado probando alternativas al componente del navegador web C # durante algunos días y aquí está mi lista:
1. Usando las nuevas versiones de IE 8,9:
¿El componente del navegador web es IE7 no IE8? ¿Cómo cambiar esto?
Pros:
Contras:
Esto no requiere mucho trabajo y puede obtener compatibilidad con HTML5 y CSS3, aunque IE9 carece de algunas de las mejores características de CSS3 y HTML5. Pero estoy seguro de que podría ejecutar IE10 de la misma manera. El problema sería que el sistema de destino tendría que tener IE10 instalado, y como todavía está en versión preliminar en Windows 7, sugeriría que no lo haga.
2. OpenWebKitSharp
OpenWebKitSharp es un contenedor .net para el motor de webkit basado en el proyecto WebKit.NET 0.5. WebKit es un motor de diseño utilizado por Chrome / Safari
Pros:
Contras:
OpenWebKit es bastante agradable, aunque todavía no se han implementado muchas funciones, tuve algunos problemas al usarlo con Visual Studio, que arroja referencias de objetos nulos aquí y luego, en modo de diseño, hay algunos problemas js. Todos los que lo usen notarán casi inmediatamente que js alert no hace nada. Eventos como mouseup, mousedown ... etc. no funcionan, js arrastrar y soltar tiene errores, etc.
También tuve algunas dificultades para instalarlo, ya que requiere una versión específica de VC redistribuible instalada, así que después de la excepción, miré el registro de eventos, encontré la versión de VC y la instalé.
3. GeckoFX
Pros:
Contras:
GeckoFX es un control de navegador web multiplataforma para incrustar en aplicaciones WinForms. Esto se puede usar con .NET en Windows y con mono en Linux. Gecko es un motor de diseño utilizado por Firefox.
Me encontré con poca información de que GeckoFX no está desarrollado activamente, lo cual no es cierto, por supuesto, siempre hay una o dos versiones detrás de Firefox, pero eso es normal, me impresionó mucho la actividad y el control en sí. Hace todo lo que necesitaba, pero necesitaba algo de tiempo para que funcione, aquí hay un pequeño tutorial para que funcione:
Si realmente debe usar Chrome, eche un vistazo a este producto llamado Awesomium , es gratis para proyectos no comerciales, pero la licencia es de unos pocos miles de dólares para comerciales.
fuente
Tuve el mismo problema, el WebBrowser estaba usando una versión anterior de IE, con algunas búsquedas en Google encontré el siguiente código que hace un cambio en el registro y hace que el WebBrowser use la última versión de IE posible:
Solo necesita crear una clase y poner este código en ella, luego ejecutar el siguiente código cuando se inicie el programa:
VB.NET:
Puedes usarlo como:
fuente
Puede usar el registro para configurar la versión de IE para el control del navegador web. Vaya a: HKLM \ SOFTWARE \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BROWSER_EMULATION y agregue "yourApplicationName.exe" con el valor de browser_emulation. Para ver el valor de browser_emulation, consulte el enlace: http://msdn.microsoft.com/en-us /library/ee330730%28VS.85%29.aspx#browser_emulation
fuente
Observe el control Mono.WebBrowser : incorpora Gecko (como lo usa Firefox) o WebKit (como lo usa Safari) en WinForms (sin usar ActiveX).
fuente
Sé que esto no es un control WebBrowser de 'reemplazo', pero estaba teniendo algunos problemas terribles de representación mientras mostraba una página que usaba BootStrap 3+ para el diseño, etc. y luego encontré una publicación que sugería que usara lo siguiente. Aparentemente es específico de IE y le dice que use la última variación encontrada en la máquina del cliente para renderizar (por lo que no usará IE7 como creo que es el predeterminado)
Así que solo pon:
en algún lugar de la parte principal de su documento.
Si, por supuesto, no es su documento, entonces esto obviamente no ayudará (aunque personalmente considero que es un agujero de seguridad si está leyendo páginas no creadas por usted a través del control de navegador web, ¡por qué no usar un navegador web!)
Buena suerte.
fuente
<head>
, lo puso como el primer hijo de<head>
. Nos tomó un tiempo resolver esto.<meta>
primer hijo de<head>
, se ejecutará en modo de compatibilidad, no en modo de borde.Eche un vistazo a la biblioteca DotNetBrowser . Proporciona controles de navegador WPF y WinForms basados en Chromium, que son bastante fáciles de integrar en la aplicación .NET. Es compatible con todos los estándares web modernos, incluidos HTML5, CSS3 y JavaScript. La página renderizada se ve exactamente como en Google Chrome.
La biblioteca hereda la arquitectura multiproceso de Chromium: cada página web se procesa en un proceso de Chromium separado y la aplicación continuará funcionando incluso después de que el complemento se bloquee o se produzca cualquier otro error inesperado en la página web.
Estas son algunas otras características útiles, proporcionadas por DotNetBrowser: es posible escuchar eventos de carga, manejar la actividad de la red, configurar proxy, simular acciones del usuario, trabajar con cookies, acceder y modificar DOM, escuchar eventos DOM, llamar a JavaScript desde .NET y viceversa, use la cámara web y el micrófono en la página web, configure la comunicación basada en WebRTC y más .
Consulte la Referencia de API para más detalles.
El fragmento de código a continuación muestra cómo crear un BrowserView, incrustarlo en un formulario y cargar una URL:
Una vez que ejecute el ejemplo anterior, obtendrá el siguiente resultado:
La biblioteca es comercial. Las licencias comerciales incluyen paquetes de soporte para diferentes tamaños de equipo. También es posible comprar el código fuente de la biblioteca.
Además de su propia página, el componente está disponible como paquete NuGet y como paquete VSIX en Visual Studio Marketplace.
fuente
He probado un puñado de variantes de Webkit, pero en mi experiencia nada supera los avances que tiene OpenWebkitSharp . Me encanta, me encanta ... Las puntuaciones de HTML5 y CSS3 son lo más cercanas que pueden llegar a Google Chrome. Muy buena API y modelo de eventos. Si encuentra API "no implementadas" muy probablemente porque no están implementadas en Webkit. Todo lo demás funciona muy bien.
fuente
ACTUALIZACIÓN 2018 MAYO
Si está apuntando a que la aplicación se ejecute en Windows 10, ahora puede incrustar el navegador Edge en su aplicación .net utilizando Windows Community Toolkit .
Ejemplo de WPF:
1) Instale el paquete Nuget de Windows Community Toolkit
2) Código XAML
3) Código CS:
Ejemplo de WinForms:
Por favor, consulte este enlace para más información.
fuente
Prueba EO.WebBrowser . Es nuevo y se basa en la última versión del navegador Chrome. La mejor parte es que empaqueta todo dentro de un solo .NET dll, por lo que no solo es muy fácil de usar e implementar, sino que también la misma DLL admite 32 bits y 64 bits porque es un .NET dll.
fuente
He usado GeckoFX y me sirve muy bien. Utiliza el motor Firefox. La única advertencia con la que me he encontrado es que emite el evento "DocumentLoaded" una vez antes de que el documento esté completamente cargado ... Creo que dispara uno cuando se carga el HTML y luego otro cuando todo el Se cargan imágenes y cosas. Lo arreglé simplemente ignorando el primero, y hasta ahora ha funcionado maravillosamente sin fallas.
Puede encontrarlo aquí: https://bitbucket.org/geckofx/
Como la mayoría de las bibliotecas decentes, es de código abierto.
fuente
MozNet es un control .NET, anteriormente basado en el control GeckoFX más o menos abandonado, pero está en pleno desarrollo y tiene muchas más funciones de las que GeckoFX puede sacudir un palo. Puede encontrarlo en el sitio web de Se7en Soft .
fuente
EO.BrowserControl es rápido y fácil. Tiene motor de navegador Chrome y funciona con cualquier versión de .NET
https://visualstudiogallery.msdn.microsoft.com/fcee0646-42e7-484f-b22e-f8b2ace55dd7
Nota: Este es un producto con licencia comercial y no lo estoy promocionando con eso en mente. Después de probar varias otras cosas, terminé eligiendo esto.
fuente
Actualización 2016:
Hay 3 opciones adicionales que puedo sugerir:
1. BrowseEmAll.Cef
Un componente .Net que se puede utilizar para integrar el motor Chrome en su aplicación .Net. Basado en CefGlue pero un poco más rápido en las actualizaciones de la última versión de Chrome. También hay una opción de soporte comercial disponible que puede ser útil para algunos. Por supuesto, el componente en sí es de código abierto .
2. BrowseEmAll.Gecko
Otro componente .Net que se puede utilizar para integrar el motor Firefox en su aplicación .Net. Esto se basa en Geckofx, pero a diferencia de la versión actual de Geckofx, funcionará con una versión de lanzamiento normal de Firefox. Para usar Geckofx, deberá construir Firefox usted mismo. Una vez más, el soporte comercial está disponible, pero el componente en sí es completamente de código abierto .
3. BrowseEmAll Core API
¿Necesita todos los navegadores diferentes en su aplicación .Net? En la API principal de BrowseEmAll puede integrar Chrome, Firefox, Webkit e Internet Explorer en su aplicación. Este es un producto comercial, así que ten cuidado.
(Divulgación completa: trabajo para esta empresa, así que tome todo lo que digo con un grano de sal)
fuente
Webview2: basado en cromo (vista previa) ahora está disponible para winform y wpf
Por favor, eche un vistazo: https://docs.microsoft.com/en-us/microsoft-edge/webview2/
fuente
Si está buscando un buen control basado en IE, consulte: http://code.google.com/p/csexwb2/
Lo he usado en productos de producción. Es bastante bueno y tiene buenas demostraciones, aunque parece que ahora no se mantiene tan bien como solía hacerlo.
fuente
Geckofx y Webkit.net fueron prometedores al principio, pero no se mantuvieron actualizados con Firefox y Chrome respectivamente, mientras que a medida que Internet Explorer mejoró, también lo hizo el control Webbrowser, aunque se comporta como IE7 por defecto, independientemente de la versión de IE que tenga tienen pero eso se puede solucionar yendo al registro y cambiándolo a IE9 permitiendo HTML5.
fuente
Echa un vistazo al control GeckoFX .
fuente
He probado todos los navegadores que están ahí fuera. Lamentablemente, el único que realmente funcionó para mí en todas las circunstancias fue EO.Browser. Desearía haber elegido una solución gratuita, pero terminé con EO.Browser. Es bastante caro, pero está bien mantenido.
fuente
Actualización 2016:
Para mí, la única alternativa de navegador confiable y mantenida a IE es EO.WebBrowser. Pasé días y semanas probando a los demás. Todos ellos tuvieron algunos problemas que me detuvieron en algún momento.
fuente
Vale la pena echarle un vistazo a un producto comercial como WebKitX aquí: https://www.webkitx.com
Utiliza Chromium Embedded Framework y renderiza HTML5, WebGL, PDF y Flash en Windows XP, 7, 8, 10. También proporciona sabores de control de 32 bits y de 64 bits.
Ofrece acceso DOM utilizando objetos COM similares al control IE WebBrowser:
Puede llamar a JavaScript por el nombre de la función pasando argumentos escalares (sin usar eval) y también tiene devoluciones de llamada de JavaScript para Angular :
Puede agregar sus propios objetos COM interoperables a JavaScript:
Es compatible con WebGL / WebAudio para juegos HTML5, que puede deshabilitar para entornos Citrix:
fuente