c# - dotnetbrowser - chromium.net control
¿Reemplazando el control.NET WebBrowser con un mejor navegador, como Chrome? (20)
Chrome usa (una bifurcación de) Webkit si no lo sabía, que también es usado por Safari. Aquí hay algunas preguntas que son de la misma línea:
El webkit one no es muy bueno como dice la otra respuesta, una versión ya no funciona (el código Google) y el Mono es experimental. Sería bueno si alguien hiciera el esfuerzo de hacer un envoltorio decente de .NET, 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 el IE (8). ) motor carece.
Actualización (2014)
Hay un nuevo proyecto con licencia dual que le permite incrustar Chrome en sus aplicaciones .NET llamadas Awesomium . Viene con una API .NET, pero requiere bastantes cortes 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. Se basa en el cromo.
¿Hay alguna manera relativamente fácil de insertar un navegador moderno en una aplicación .NET?
Por lo que entiendo, el control WebBrowser
es un envoltorio para IE , 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 de CSS, seguridad potencial riesgos (si el motor de renderizado no fue parchado, ¿puedo realmente esperar que se solucionen los zillion de problemas de desbordamiento del búfer?), 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, la interfaz con algunas de las funciones de mi sitio web y otras cosas de ese orden, pero tengo otra aplicación en mente que requerirá más control de errores.
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", "volver", "recargar" ...
- Acceso liberal al código de página y salida.
Estaba pensando en Chrome, ya que está bajo la licencia BSD, pero estaría igual de feliz 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 se pudiera parchear el control WebBrowser
existente, que ya cubre 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
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.
Echa un vistazo a la biblioteca DotnetBrowser . Proporciona controles de navegador WPF y WinForms basados en Chromium, que son bastante fáciles de incrustar en la aplicación .NET. Es compatible con todos los estándares web modernos, incluyendo HTML5, CSS3 y JavaScript. La página renderizada se ve exactamente como en Google Chrome.
La biblioteca hereda la arquitectura de procesos múltiples de Chromium: cada página web se procesa en un proceso Chromium separado, y la aplicación continuará funcionando incluso después de que se produzca un error en el complemento o cualquier otro error inesperado en la página web.
Aquí hay algunas otras características útiles proporcionadas por DotNetBrowser: es posible escuchar eventos de carga, manejar la actividad de la red, configurar proxy, simular acciones de 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 more .
Echa un vistazo a la referencia de la 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:
using System.Windows.Forms;
using DotNetBrowser;
using DotNetBrowser.WinForms;
namespace WinForms.DotNetBrowser
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
BrowserView browserView = new WinFormsBrowserView();
Controls.Add((Control) browserView);
browserView.Browser.LoadURL("http://www.youtube.com");
}
}
}
Una vez que ejecute el ejemplo anterior, obtendrá el siguiente resultado:
La biblioteca es comercial, sin embargo, es gratuita para su uso en proyectos de código abierto y académicos. Las licencias comerciales incluyen paquetes de soporte para diferentes tamaños de equipos. 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.
Eche un vistazo al control Mono.WebBrowser : incorpora Gecko (como lo usa Firefox) o WebKit (como lo usa Safari) en WinForms (sin usar ActiveX).
He estado probando alternativas al componente de navegador web C # durante algunos días y aquí está mi lista:
1. Usando las versiones más nuevas de IE 8,9:
¿El componente del navegador web es IE7 no IE8? ¿Cómo cambiar esto?
Pros:
- No se necesita mucho trabajo para que funcione
- algo de compatibilidad con HTML5 / CSS3 si IE9, completo si IE10
Contras:
- La máquina de destino debe tener instalada la versión de IE de destino, IE10 aún está en vista previa en Win7
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ías hacer funcionar IE10 de la misma manera. El problema sería que el sistema de destino tendría que tener instalado IE10, y dado que aún está en vista previa en Windows 7, sugeriría que no.
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:
- Desarrollado activamente
- Soporte HTML5 / CSS3
Contras:
- Muchas características no implementadas
- No es compatible con x64 (la aplicación debe estar construida para x86)
OpenWebKit es bastante bueno, aunque muchas características aún no están implementadas, experimenté algunos problemas al usarlo con Visual Studio, que arroja una referencia de objeto nula aquí y luego en el modo de diseño, hay algunos problemas con js. Todo el mundo que lo use notará inmediatamente que la alerta js no hace nada. Eventos como mouseup, mousedown ... etc. no funcionan, js arrastrar y soltar tiene errores y así sucesivamente ..
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, observé el registro de eventos, encontré la versión de VC y la instalé.
3. GeckoFX
Pros:
- Funciona en mono
- Desarrollado activamente
- Soporte HTML5 / CSS3
Contras:
- D̶o̶e̶s̶n̶''̶t̶ ̶s̶u̶p̶p̶o̶r̶t̶ ̶x̶6̶4̶ ̶ (̶A̶p̶ ̶m̶u̶s̶t̶ ̶b̶e̶ ̶b̶u̶i̶l̶t̶ ̶f̶o̶r̶ x̶̶̶̶
GeckoFX es un control Webrowser 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 ponerlo en funcionamiento, aquí hay un pequeño tutorial para que funcione:
- Descargue GeckoFx-Windows-16.0-0.2 , aquí puede verificar si hay nuevos GeckoFX disponibles
- Añadir referencias a dos archivos DLL descargados
- Como GeckoFX es un contenedor que necesita XulRunner, vaya a la Lista de versiones para ver cuál necesita
- Ahora que sabemos qué versión de XulRunner necesitamos, vamos a las versiones de Mozilla XulRunner , vamos a la carpeta de versiones -> tiempos de ejecución -> xulrunner- (tu_versión) .en-US.win32.zip, en nuestro caso xulrunner-16.0.en-US.win32.zip
- Descomprima todo y copie todos los archivos a su bin / Debug (o libérelo si su proyecto está configurado para ser liberado)
- Vaya al diseñador de estudio visual de su formulario, vaya a la caja de herramientas, haga clic con el botón derecho dentro de -> Elegir elementos -> Examinar -> Encuentre el archivo dll de GeckoFX winforms descargado -> Aceptar
- Ahora deberías tener nuevo control GeckoWebBrowser
Si realmente debe usar Chrome, eche un vistazo a este producto llamado Awesomium , es gratuito para proyectos no comerciales, pero la licencia es de unos miles de dólares para fines comerciales.
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 bonito API y modelo de eventos. Si encuentra las API "no implementadas" lo más probable es que no estén implementadas en Webkit. Todo lo demás funciona muy bien.
OpenWebKitSharp es un contenedor .net para el motor de webkit basado en el proyecto WebKit.NET 0.5. Agrega más funcionalidad a la versión 0.5 y proporciona más métodos que esa compilación. OpenWebKitSharp admite tanto la compilación de Cairo (0.5) como las compilaciones nocturnas de webkit (Nightly por defecto). En la versión 1.5, estable y más, la versión nocturna se incluye y se copia automáticamente después de la construcción. En versiones anteriores esto sucede con la construcción del cairo. OpenWebKitSharp actualmente funciona con GTLite Navigator, un navegador web rápido, estable y flexible.
He usado GeckoFX y me sirve muy bien. Utiliza el motor de Firefox. La única advertencia con la que me he topado 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 Las imágenes y esas cosas están cargadas. Lo arreglé simplemente ignorando el primero, y hasta ahora ha funcionado a la perfección sin fallar.
Lo puedes encontrar aquí: https://bitbucket.org/geckofx/
Como la mayoría de las bibliotecas decentes, es de código abierto.
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 agitar. Lo puedes encontrar en el sitio web de Se7en Soft .
Pruebe EO.WebBrowser . Es nuevo y está basado en la última versión del navegador Chrome. La mejor parte de esto es que contiene todo dentro de una sola DLL .NET, por lo que no solo es muy fácil de usar e implementar, sino que la misma DLL admite tanto 32 bits como 64 bits porque es una DLL .NET.
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
Sé que este no es un control de "reemplazo" de WebBrowser, pero tuve algunos problemas 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 cliente para renderizar (por lo que no usará IE7, ya que creo que es la opción predeterminada)
Así que solo pon:
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
En algún lugar en la parte principal de su documento.
Si, por supuesto, no es su documento, obviamente esto no servirá de nada (aunque personalmente lo considero un agujero de seguridad si está leyendo páginas que no ha creado usted mismo a través del control del navegador web, ¿por qué no usar un navegador web)?
Buena suerte.
Si está buscando un buen control basado en IE, visite: http://code.google.com/p/csexwb2/
Lo he usado en productos de producción. Es bastante bueno y tiene buenas demostraciones, aunque no parece que se esté manteniendo tan bien ahora como antes.
Tuve el mismo problema, el WebBrowser estaba usando una versión antigua de IE, con un poco de 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:
public enum BrowserEmulationVersion
{
Default = 0,
Version7 = 7000,
Version8 = 8000,
Version8Standards = 8888,
Version9 = 9000,
Version9Standards = 9999,
Version10 = 10000,
Version10Standards = 10001,
Version11 = 11000,
Version11Edge = 11001
}
public static class WBEmulator
{
private const string InternetExplorerRootKey = @"Software/Microsoft/Internet Explorer";
public static int GetInternetExplorerMajorVersion()
{
int result;
result = 0;
try
{
RegistryKey key;
key = Registry.LocalMachine.OpenSubKey(InternetExplorerRootKey);
if (key != null)
{
object value;
value = key.GetValue("svcVersion", null) ?? key.GetValue("Version", null);
if (value != null)
{
string version;
int separator;
version = value.ToString();
separator = version.IndexOf(''.'');
if (separator != -1)
{
int.TryParse(version.Substring(0, separator), out result);
}
}
}
}
catch (SecurityException)
{
// The user does not have the permissions required to read from the registry key.
}
catch (UnauthorizedAccessException)
{
// The user does not have the necessary registry rights.
}
return result;
}
private const string BrowserEmulationKey = InternetExplorerRootKey + @"/Main/FeatureControl/FEATURE_BROWSER_EMULATION";
public static BrowserEmulationVersion GetBrowserEmulationVersion()
{
BrowserEmulationVersion result;
result = BrowserEmulationVersion.Default;
try
{
RegistryKey key;
key = Registry.CurrentUser.OpenSubKey(BrowserEmulationKey, true);
if (key != null)
{
string programName;
object value;
programName = Path.GetFileName(Environment.GetCommandLineArgs()[0]);
value = key.GetValue(programName, null);
if (value != null)
{
result = (BrowserEmulationVersion)Convert.ToInt32(value);
}
}
}
catch (SecurityException)
{
// The user does not have the permissions required to read from the registry key.
}
catch (UnauthorizedAccessException)
{
// The user does not have the necessary registry rights.
}
return result;
}
public static bool SetBrowserEmulationVersion(BrowserEmulationVersion browserEmulationVersion)
{
bool result;
result = false;
try
{
RegistryKey key;
key = Registry.CurrentUser.OpenSubKey(BrowserEmulationKey, true);
if (key != null)
{
string programName;
programName = Path.GetFileName(Environment.GetCommandLineArgs()[0]);
if (browserEmulationVersion != BrowserEmulationVersion.Default)
{
// if it''s a valid value, update or create the value
key.SetValue(programName, (int)browserEmulationVersion, RegistryValueKind.DWord);
}
else
{
// otherwise, remove the existing value
key.DeleteValue(programName, false);
}
result = true;
}
}
catch (SecurityException)
{
// The user does not have the permissions required to read from the registry key.
}
catch (UnauthorizedAccessException)
{
// The user does not have the necessary registry rights.
}
return result;
}
public static bool SetBrowserEmulationVersion()
{
int ieVersion;
BrowserEmulationVersion emulationCode;
ieVersion = GetInternetExplorerMajorVersion();
if (ieVersion >= 11)
{
emulationCode = BrowserEmulationVersion.Version11;
}
else
{
switch (ieVersion)
{
case 10:
emulationCode = BrowserEmulationVersion.Version10;
break;
case 9:
emulationCode = BrowserEmulationVersion.Version9;
break;
case 8:
emulationCode = BrowserEmulationVersion.Version8;
break;
default:
emulationCode = BrowserEmulationVersion.Version7;
break;
}
}
return SetBrowserEmulationVersion(emulationCode);
}
public static bool IsBrowserEmulationSet()
{
return GetBrowserEmulationVersion() != BrowserEmulationVersion.Default;
}
}
Solo necesita crear una clase y poner este código en ella, luego ejecute el siguiente código cuando se inicie el programa:
if (!WBEmulator.IsBrowserEmulationSet())
{
WBEmulator.SetBrowserEmulationVersion();
}
ACTUALIZACIÓN 2018 MAYO
Si está orientando la aplicación para que se ejecute en Windows 10, ahora puede incrustar el navegador Edge en su aplicación .net usando el Kit de herramientas de la comunidad de Windows .
Ejemplo de WPF:
1) Instalar el paquete de Windows Community Toolkit Nuget
Install-Package Microsoft.Toolkit.Win32.UI.Controls -Version 3.0.0-preview
2) Código XAML
<Window
x:Class="WebViewTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:WPF="clr-namespace:Microsoft.Toolkit.Win32.UI.Controls.WPF;assembly=Microsoft.Toolkit.Win32.UI.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WebViewTest"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Title="MainWindow"
Width="800"
Height="450"
mc:Ignorable="d">
<Grid>
<WPF:WebView x:Name="wvc" />
</Grid>
</Window>
3) Código CS:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
// You can also use the Source property here or in the WPF designer
wvc.Navigate(new Uri("https://www.microsoft.com"));
}
}
Ejemplo de WinForms:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// You can also use the Source property here or in the designer
webView1.Navigate(new Uri("https://www.microsoft.com"));
}
}
Por favor, consulte este link para obtener más información.
Nota: Esta biblioteca está en su etapa de vista previa.
Actualización 2016:
Hay 3 opciones adicionales que puedo sugerir:
Un componente .Net que puede usarse 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 .
Otro componente .Net que puede utilizarse para integrar el motor de Firefox en su aplicación .Net. Esto se basa en https://bitbucket.org/geckofx/ pero a diferencia de la versión actual de Geckofx, funcionará con una versión de lanzamiento normal de Firefox. Para usar Geckofx necesitarás construir Firefox por ti mismo. Una vez más, el soporte comercial está disponible, pero el componente en sí es totalmente de código abierto .
¿Necesita todos los diferentes navegadores en su aplicación .Net? En la API de BrowseEmAll Core puede integrar Chrome, Firefox, Webkit e Internet Explorer en su aplicación. Este es un producto comercial, así que ten cuidado.
(Revelación completa: trabajo para esta empresa, así que tome todo lo que diga con un grano de sal)
Revise los enlaces de CefSharp .Net , un proyecto que comencé hace un tiempo que afortunadamente fue recogido por la comunidad y se convirtió en algo maravilloso.
El proyecto envuelve el marco incorporado de Chromium y se ha utilizado en varios proyectos importantes, como 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 funciones y puntos de extensión. Al estar basado en Chromium es increíblemente rápido también.
Cójalo de NuGet: Install-Package CefSharp.Wpf
o Install-Package CefSharp.WinForms
Vea ejemplos y exprese sus opiniones / comentarios / solicitudes de extracción: https://github.com/cefsharp/CefSharp
Licencia BSD
Actualización 2016:
Para mí, la única alternativa de navegador confiable y mantenida para IE es EO.WebBrowser. Pasé días y semanas probando los demás. Todos ellos tuvieron algunos problemas que detuvieron el espectáculo para mí en algún momento.
Geckofx y Webkit.net fueron prometedores al principio, pero no se mantuvieron actualizados con Firefox y Chrome respectivamente, mientras que Internet Explorer mejoró, también lo hizo el control del navegador web, aunque se comporta como IE7 por defecto, independientemente de la versión de IE pero se puede solucionar ingresando al registro y cambiándolo a IE9 permitiendo HTML5.
Echa un vistazo al control GeckoFX .
He probado todos los navegadores que están por ahí. Desafortunadamente, 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 bien mantenido.