165 votes

Options pour incorporer Chromium au lieu du contrôle IE WebBrowser avec WPF / C #

Internet Explorer à base de WPF contrôle WebBrowser souffre de clavier et de cibler les enjeux et les problèmes de fuite de mémoire. Comme une solution alternative à ces problèmes, nous envisageons d'options disponibles pour l'hébergement de Chrome au lieu de contrôle WebBrowser dans notre WPF/C# projet basé autour d'édition HTML. Des questions similaires ont été posées ici auparavant. J'ai lu les réponses et fait mes propres recherches, mais j'espère obtenir de plus les commentaires de personnes qui ont effectivement utilisé l'une des options suivantes dans la production des projets de qualité:

Awesomium et Awesomium.NET

Il semble tout à fait approprié, mais je n'aime pas le fait que le projet n'est pas open-source, et la source n'est pas facilement disponible. Aussi, il serait peut-être trop pour notre projet, comme hors de l'écran le rendu n'est pas vraiment quelque chose que nous dépendons.

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

C'est probablement la meilleure option actuellement disponibles. Le projet semble être vivante et active, étant actuellement en synchronisation avec google Chrome v27. CEF3 utilise Chrome multi-architecture de processus. Aussi, il semble que Adobe est de le donner à un certain point.

Google Chrome Frame

Alors que l'objectif initial était d'être un HTML5 plugin pour IE et Firefox, il fonctionne de manière autonome contrôle ActiveX trop, donc j'ai pu l'envelopper pour une utilisation avec WPF. Il expose suffisamment d'API pour l'interaction avec l'intérieur de la page web (onmessage, addEventListener/removeEventListener, postMessage). Je suis conscient de Google est de cesser Chrome Frame, mais je suppose que les sources restera dans Chrome référentiel. Il ne devrait pas être difficile de le mettre à jour avec la dernière Chrome code que nous allons, et nous permettrait d'avoir le plein contrôle sur cela.

WebKit .NET wrapper

Pas exactement Chrome-fondé et n'utilise pas de moteur V8, il n'est pas vraiment une option.

Est-il une autre possibilité que je pourrais avoir négligé?

Je serais très reconnaissant si quelqu'un a partagé son expérience avec l'une des options ci-dessus pour une vraie vie, de la production-qualité projet WPF. Avez-vous de l'intégration, de l'octroi de licences ou de déploiement de ses conséquences? Je vous remercie.

[ÉDITÉ] Je tiens également à remercier artlung pour donner à cette question, un coup de pouce en offrant une généreuse prime offre.

130voto

Czarek Tomczak Points 4551

Vous avez déjà la liste la plus notable solutions pour l'intégration de Chrome (CEF, google Chrome Frame, Awesomium). Il n'y a plus de projets que de la matière.

Il y a encore le Berkélium projet (voir le Berkélium Forte et Berkélium Réussi), mais il emebeds une ancienne version de 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 Par Lundberg travaille activement sur le portage de MIE 3 à CefSharp, c'est la meilleure option pour l'avenir. Il est également Xilium.CefGlue, mais celui-ci offre un faible niveau de l'API pour les CEF, il se lie à l'API C de la CEF. CefSharp sur l'autre main se lie à l'API C++ de la CEF.

Adobe n'est pas le seul acteur majeur de l'aide de MIE, voir parmi les autres applications à l'aide de la CEF le CEF page wikipedia: http://en.wikipedia.org/wiki/Chromium_Embedded_Framework#Applications_using_CEF

La mise à jour de google Chrome Frame pour la dernière version de Chrome pourrait ne pas être si facile que vous pensez. Je pense que ce serait un processus compliqué, comme le Chrome Contenu de l'API est en constante évolution. Vous avez le nouveau moteur de rendu Blink, les nouvelles fonctions ajoutées tout le temps. Sans un interne de Chrome connaissance, cela va être dur.

10voto

Artem Points 1620

Nous avons eu exactement le même problème il y a quelques temps. Nous voulions aller avec CEF3 bibliothèque open source qui est en fonction de WPF et de soutien .NET 3.5.

Tout d'abord, l'auteur de la CEF, lui-même cotée de liaison pour les différentes langues ici.

Deuxièmement, nous sommes allés de l'avant avec l'open source .NET CEF3 de liaison qui est appelé Xilium.CefGlue et a eu un bon succès avec elle. Dans le cas où quelque chose ne fonctionne pas comme vous le souhaitez, auteur généralement très sensible aux questions ouvertes dans le bitbucket tracker

Jusqu'à présent, il nous a bien servi. L'auteur met à jour sa bibliothèque à l'appui de dernière CEF3 les rejets et les corrections de bugs sur des bases régulières.

7voto

Jason Points 391

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 seule DLL .NET que vous pouvez simplement référencer et utiliser.

4voto

Ming Slogar Points 957

J'ai utilisé Awesomium.NET. Bien que je n'aime pas le fait que ce ne soit pas du tout open-source, ni le fait qu'il utilise un très ancien moteur de rendu Webkit, il est vraiment facile à utiliser. C'est à peu près le seul soutien que je puisse lui donner.

2voto

Sameer Vartak Points 131

J'ai eu le même problème avec mon WPF lecteur de flux RSS, j'y suis allé avec Awesomium (je pense que la version 1.6) Awesomium est grande. Vous obtenez beaucoup de contrôle pour la mise en cache des images et du contenu HTML), exécution de JavaScript, l'interception de 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 c'est aussi lourd, même version version ajoute environ 10-15 mo (ne me souviens pas le nombre exact), et donc une légère start-up de la peine. J'ai alors réalisé, le seul problème que j'ai eu avec le navigateur IE contrôle, il était de jeter les erreurs JavaScript chaque maintenant et encore. Mais cela a été résolu avec l'extrait de code suivant.

J'ai à peine utilisé mon application sur XP ou Vista, mais sur Win 7 et au-dessus il n'a jamais planté (au moins pas parce que j'ai utilisé le navigateur IE contrôle)

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 });
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X