net dotnetbrowser control c# wpf google-chrome webbrowser-control chromium-embedded

dotnetbrowser - Opciones para incrustar Chromium en lugar del control IE WebBrowser con WPF/C#



chromium.net control (7)

ACTUALIZACIÓN 2018 MAYO:

Alternativamente, puede incrustar el navegador Edge, pero solo apuntar a Windows 10.

Aquí está la solución.

El control WPF WebBrowser basado en Internet Explorer adolece de algunos problemas de teclado y enfoque y problemas de pérdida de memoria . Como una solución alternativa a estos problemas, estamos considerando opciones disponibles para alojar Chromium en lugar del control WebBrowser en nuestro proyecto WPF / C # basado en la edición de HTML. Preguntas similares han sido asked aquí previamente. He leído las respuestas y he hecho mi propia investigación, pero espero obtener más retroalimentación de las personas que realmente han utilizado alguna de las siguientes opciones en proyectos de calidad de producción :

Awesomium y Awesomium.NET

Parece muy apropiado, pero no me gusta el hecho de que el proyecto no sea de código abierto y la fuente completa no esté disponible fácilmente. Además, puede ser una exageración para nuestro proyecto, ya que la representación fuera de pantalla no es algo de lo que realmente dependemos.

Chromium Embedded Framework (CEF) y enlaces .NET para CEF

Esta es probablemente la mejor opción actualmente disponible. El proyecto parece estar vivo y activo, estando actualmente sincronizado con Chrome v27. CEF3 utiliza la arquitectura multiproceso de Chrome. También parece que Adobe le está otorgando algún respaldo .

Marco de Chrome de Google

Si bien el objetivo original era ser un complemento HTML5 para IE y Firefox, en realidad también funciona como control ActiveX independiente, así que podría envolverlo para usarlo con WPF. Expone una API suficiente para interactuar con la página web interna ( onmessage, addEventListener/removeEventListener, postMessage ). Sé que Google discontinue Chrome Frame, pero supongo que las fuentes permanecerán en el repositorio de Chromium. No debería ser difícil actualizarlo con el último código de Chromium sobre la marcha, y tendríamos un control total sobre esto.

WebKit .NET wrapper

No está basado exactamente en Chromium y no usa el motor V8, por lo que no es realmente una opción.

¿Hay alguna otra opción que podría haber pasado por alto?

Agradecería enormemente que alguien compartiera su experiencia con alguna de las opciones anteriores para un proyecto WPF real y de calidad de producción. ¿Tuvo alguna implicación de integración, licencia o implementación? Gracias.

[EDITADO] También me gustaría agradecer a artlung por dar un empujón a esta pregunta al ofrecer una generosa oferta de recompensas.



Eche un vistazo a la biblioteca DotNetBrowser desarrollada por el equipo al que pertenezco. Proporciona controles de navegador basados ​​en Chromium WPF y WinForms, que son bastante fáciles de incorporar a 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 multiprocesamiento de Chromium: cada página web se procesa en un proceso separado de Chromium y la aplicación continuará funcionando incluso después de que el plugin se cuelgue o se produzca cualquier otro error inesperado en la página web.

Aquí hay algunas otras características útiles, proporcionadas por DotNetBrowser: es posible escuchar cargar eventos, manejar la actividad de red, configurar el proxy, simular acciones de usuario, trabajar con cookies, acceder y modificar DOM, escuchar eventos DOM, invocar 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 .

Consulte la Referencia de API para más detalles.

El siguiente fragmento de código 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 ejecutas el ejemplo anterior obtendrás el siguiente resultado:

La biblioteca es comercial, sin embargo, es gratuita para uso en proyectos académicos y de código abierto. 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.


He usado Awesomium.NET. Aunque no me gusta el hecho de que no sea de código abierto, y también el hecho de que utiliza un motor de renderizado Webkit bastante antiguo, es realmente fácil de usar. Ese es el único endoso que puedo darle.


Tuve el mismo problema con mi lector de WPF RSS, originalmente fui con Awesomium (creo que versión 1.6). Awesomium es genial. Obtienes mucho control para el almacenamiento en caché (imágenes y contenido HTML), la ejecución de JavaScript, la interceptación de descargas, etc. También es súper rápido. El aislamiento del proceso significa que cuando el navegador falla, no bloquea la aplicación.

Pero también es pesado, incluso la versión de lanzamiento agrega alrededor de 10-15 mb (no puedo recordar el número exacto) y por lo tanto una leve penalización de arranque. Entonces me di cuenta de que el único problema que tenía con el control del navegador IE era que lanzaba los errores de JavaScript de vez en cuando. Pero eso se solucionó con el siguiente fragmento.

Apenas utilicé mi aplicación en XP o Vista, pero en Win 7 y superior nunca se bloqueó (al menos no porque utilicé el control del navegador IE)

IOleServiceProvider sp = browser.Document as IOleServiceProvider; if (sp != null) { IID_IWebBrowserApp = new Guid("0002DF05-0000-0000-C000-000000000046"); Guid IID_IWebBrowser2 = new Guid("D30C1661-CDAF-11d0-8A3E-00C04FC9E26E"); webBrowser; sp.QueryService(ref IID_IWebBrowserApp, ref IID_IWebBrowser2, out webBrowser); if (webBrowser != null) { webBrowser.GetType().InvokeMember("Silent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.PutDispProperty, null, webBrowser, new object[] { silent }); } }


Tuvimos exactamente el mismo desafío hace algún tiempo. Queríamos ir con la biblioteca de código abierto CEF3 que está basada en WPF y es compatible con .NET 3.5.

En primer lugar, el autor de CEF mismo enumeró el enlace para diferentes idiomas here .

En segundo lugar, seguimos adelante con el enlace de código abierto .NET CEF3 que se llama Xilium.CefGlue y tuvo un buen éxito con él. En los casos en que algo no funciona como es de esperar, el autor suele ser muy receptivo a los problemas que se presentan en el rastreador bitbucket integrado

Hasta ahora nos ha servido bien. El autor actualiza su biblioteca para soportar las últimas versiones de CEF3 y correcciones de errores en bases regulares.


Ya ha enumerado las soluciones más destacadas para incrustar Chromium (CEF, Chrome Frame, Awesomium). No hay más proyectos que importan.

Todavía existe el proyecto Berkelium (ver Berkelium Sharp y Berkelium Managed ), pero emebeds una versión anterior de Chromium.

CEF es su mejor apuesta: es totalmente de código abierto y se actualiza con frecuencia. Es la única opción que le permite incrustar la última versión de Chromium. Ahora que Per Lundberg está trabajando activamente en portar CEF 3 a CefSharp , esta es la mejor opción para el futuro. También hay Xilium.CefGlue , pero este proporciona un API de bajo nivel para CEF, se une a la API C de CEF. CefSharp por otro lado se une a la API de C ++ de CEF.

Adobe no es el único jugador importante que usa CEF, vea otras aplicaciones notables que usan CEF en la página de wikipedia de CEF .

Actualizar Chrome Frame no tiene sentido ya que el proyecto ha sido discontinue .