Options pour l'intégration du chrome au lieu de IE WebBrowser control avec WPF / C#

Internet Explorer à base de WPF contrôle WebBrowser souffre de quelques clavier et les problèmes de focus et problèmes de fuite de mémoire . Comme solution alternative à ces problèmes, nous considérons les options disponibles pour l'hébergement de Chromium au lieu de contrôle WebBrowser dans notre projet WPF/C# basé sur l'édition HTML. Des questions similaires ont été demandé ici précédemment. J'ai lu les réponses et fait mes propres recherches, mais j'espère obtenir un peu plus de feedback de la part des personnes qui ont effectivement utilisé l'une des options suivantes dans des projets de qualité de production :

Awesomium et Awesomium.NET

il semble très approprié, mais je n'aime pas le fait que le projet n'est pas open-source et la source complète n'est pas facilement disponible. En outre, il pourrait être un surmenage pour notre projet, comme le rendu hors écran ce n'est pas quelque chose dont nous dépendons vraiment.

Chrome Incorporé Cadre (CEF) et .NET liaisons pour CEF

C'est probablement la meilleure option actuellement disponibles. Le projet semble être vivant et actif, étant actuellement en phase avec Chrome v27. CEF3 utilise une architecture multi-processus Chrome. Il semble aussi Qu'Adobe lui donne une certaine approbation .

Google Chrome Frame

alors que son but original était d'être un plugin HTML5 pour IE et Firefox, il fonctionne en fait comme contrôle ActiveX autonome aussi, donc je pourrais l'envelopper pour une utilisation avec WPF. Il expose un API suffisante pour l'interaction avec la page Web intérieure ( onmessage, addEventListener/removeEventListener, postMessage ). Je sais que Google est à discontinuer cadre Chrome, mais je suppose que les sources resteront en chrome référentiel. Il ne devrait pas être difficile de le mettre à jour au fur et à mesure avec le dernier code de Chrome, et nous en aurions le plein contrôle.

WebKit. wrapper net

N'est pas exactement à base de Chrome et n'utilise pas de moteur V8, donc ce n'est pas vraiment une option.

y a-t-il une autre option que j'aurais peut-être oubliée?

je serais très reconnaissant si quelqu'un a partagé son/sa expérience de l'une ou l'autre des options ci-dessus pour un projet de FPF de qualité et de production réelle. Avez-vous eu des implications en matière d'intégration, de licence ou de déploiement? Remercier.

[EDITED] Je tiens également à remercier artlung d'avoir donné un coup de pouce à cette question en offrant une offre généreuse.

140
demandé sur Community 2013-08-08 10:17:12

7 réponses

vous avez déjà énuméré les solutions les plus notables pour l'enrobage du chrome (CEF, Chrome Frame, Awesomium). Il n'y a plus de projets qui comptent.

il existe encore le projet Berkelium (voir Berkelium Sharp et Berkelium Managed ), mais il émerge une ancienne version du chrome.

CEF est votre meilleur pari - c'est entièrement open source et fréquemment mis à jour. C'est la seule option qui vous permet d'intégrer la dernière version de Chrome. Maintenant que Per Lundberg travaille activement sur le portage de CEF 3 en CefSharp , c'est la meilleure option pour l'avenir. Il y a aussi Xilium.CefGlue , mais celui-ci fournit une API de bas niveau pour CEF, il se lie à L'API C de CEF. Par contre, CefSharp se lie à L'API C++ de CEF.

Adobe n'est pas le seul acteur majeur utilisant CEF, voir d'autres applications notables utilisant CEF sur la page CEF wikipedia .

mise à jour Chrome Frame est inutile puisque le projet a été retiré .

108
répondu Czarek Tomczak 2018-05-15 17:20:32

nous avons eu exactement le même défi il y a quelque temps. Nous voulions utiliser CEF3 open source library qui est basé sur WPF et supporte .NET 3.5.

tout d'abord, l'auteur de CEF lui-même énuméré liant pour différentes langues ici .

Deuxièmement, nous sommes allés de l'avant avec open source .net CEF3 binding qui s'appelle Xilium.CefGlue et a eu un bon succès avec elle. Dans le cas où quelque chose n'est pas travaillant comme vous vous y attendiez, l'auteur habituellement très sensible aux problèmes ouverts dans la construction bitbucket tracker

Jusqu'à présent, il nous a bien servi. L'auteur met à jour sa bibliothèque pour prendre en charge les dernières versions de CEF3 et les corrections de bogues sur des bases régulières.

11
répondu Artem 2013-08-19 08:43:07

En voici un autre:

http://www.essentialobjects.com/Products/WebBrowser/Default.aspx

celui-ci est également basé sur le dernier moteur Chrome mais il est beaucoup plus facile à utiliser que CEF. C'est une dll unique.net que vous pouvez simplement consulter et utiliser.

8
répondu Jason 2014-01-06 18:52:54

regardez la bibliothèque DotNetBrowser développée par l'équipe à laquelle j'appartiens. Il fournit des commandes de navigateur WPF et WinForms à base de Chrome, qui sont assez faciles à intégrer dans L'application .NET. Il prend en charge toutes les normes modernes de web, y compris HTML5, CSS3 et JavaScript. La page rendue ressemble exactement à celle de Google Chrome.

la bibliothèque hérite de L'architecture multi-processus de Chromium – chaque page web est rendue dans un Chrome processus, et l'application va continuer à travailler même après le plantage du plugin ou toute autre erreur inattendue se produit sur la page web.

voici quelques autres fonctionnalités utiles, fournies par DotNetBrowser: il est possible d'écouter les événements de chargement, gérer l'activité du réseau, Configurer le proxy, simuler les actions de l'utilisateur, travailler avec des cookies, accéder et modifier le DOM, écouter les événements DOM, appeler JavaScript à partir de .NET et vice versa, utiliser la caméra web et le microphone sur la page web, configurer WebRTC-fondé de la communication, et plus .

consultez le référence API pour plus de détails.

l'extrait de code ci-dessous montre comment créer un BrowserView, l'intégrer dans un formulaire, et charger une 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");
        }
    }
}

une fois que vous aurez exécuté l'exemple ci-dessus, vous obtiendrez la sortie suivante:

enter image description here

La bibliothèque est commercial, mais il est gratuit pour une utilisation en Open-Source et des projets Académiques. Les licences commerciales comprennent des paquets de soutien pour différentes tailles d'équipe. Il est également possible d'acheter le code source de la bibliothèque.

outre sa propre page, le composant est disponible en tant que NuGet package et en tant que VSIX package sur le marché de Visual Studio.

8
répondu Vladimir 2018-01-17 12:06:46

j'ai utilisé Awesomium.NET. Bien que je n'aime pas le fait qu'il ne soit pas open-source, et aussi le fait qu'il utilise un assez vieux moteur de rendu Webkit, il est vraiment facile à utiliser. C'est le seul commentaire que je puisse faire.

5
répondu Ming Slogar 2013-08-16 21:29:09

MISE À JOUR 2018 MAI:

alternativement, vous pouvez intégrer Edge browser, mais seulement cibler windows 10.

Voici la solution.

3
répondu Rahul 2018-05-11 06:16:07

j'ai eu le même problème avec mon lecteur RSS WPF, je suis allé à l'origine avec Awesomium (je pense que la version 1.6) Awesomium est grande. Vous obtenez beaucoup de contrôle pour la mise en cache (images et le contenu HTML), L'exécution JavaScript, l'interception des téléchargements et ainsi de suite. C'est aussi super rapide. Le processus d'isolement signifie que lorsque le navigateur se bloque, il ne se bloque pas l'application.

mais il est également lourd, même release build ajoute environ 10-15mb (ne me rappelle pas le nombre exact) et donc un léger Démarrage pénalité. Je me suis alors rendu compte que le seul problème que j'avais avec IE browser control était qu'il allait jeter les erreurs JavaScript de temps en temps. Mais cela a été corrigé avec l'extrait suivant.

j'ai à peine utilisé mon application sur XP ou Vista mais sur Win 7 et au-dessus il ne s'est jamais écrasé (du moins pas parce que j'ai utilisé le contrôle du navigateur 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 });
    }
}
2
répondu Sameer Vartak 2013-08-23 13:49:20