Le contrôle WPF WebBrowser basé sur Internet Explorer souffre de certains problèmes de clavier et de mise au point et de 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 du contrôle WebBrowser dans notre projet WPF / C # basé sur l'édition HTML. Des questions similaires ont déjà été posées ici. J'ai lu les réponses et fait mes propres recherches, mais j'espère obtenir plus de commentaires de personnes qui ont effectivement utilisé l'une des options suivantes dans des projets de qualité de production :
Cela semble très approprié, mais je n'aime pas le fait que le projet ne soit pas open-source et que la source complète ne soit pas facilement disponible. En outre, cela pourrait être excessif pour notre projet, car le rendu hors écran n'est pas quelque chose dont nous dépendons vraiment.
Chromium Embedded Framework (CEF) et liaisons .NET pour CEF
C'est probablement la meilleure option actuellement disponible. Le projet semble être vivant et actif, actuellement synchronisé avec Chrome v27. CEF3 utilise l'architecture multi-processus Chrome. Il semble également qu'Adobe lui donne une certaine approbation .
Alors que le but initial était d'être un plugin HTML5 pour IE et Firefox, il fonctionne également en tant que contrôle ActiveX autonome, donc je pourrais l'envelopper pour une utilisation avec WPF. Il expose une API suffisante pour l'interaction avec la page Web interne ( onmessage, addEventListener/removeEventListener, postMessage
). Je sais que Google doit interrompre Chrome Frame, mais je suppose que les sources resteront dans le référentiel Chromium. Il ne devrait pas être difficile de le mettre à jour avec le dernier code Chromium au fur et à mesure, et nous aurions un contrôle total sur cela.
Pas exactement à base de chrome et n'utilise pas de moteur V8, ce n'est donc pas vraiment une option.
Y a-t-il une autre option que j'aurais pu négliger?
J'apprécierais beaucoup si quelqu'un partageait son expérience avec l'une des options ci-dessus pour un projet WPF de qualité de production réel. Avez-vous eu des implications d'intégration, de licence ou de déploiement? Je vous remercie.
[EDITED] Je voudrais également remercier artlung d' avoir donné un coup de pouce à cette question en proposant une généreuse offre de primes.
Nous avons eu exactement le même défi il y a quelque temps. Nous voulions aller avec la bibliothèque open source CEF3 qui est basée sur WPF et prend en charge .NET 3.5.
Tout d' abord, l'auteur du CEF lui - même la liste obligatoire pour les différentes langues ici .
Deuxièmement, nous sommes allés de l'avant avec la liaison open source .NET CEF3 qui s'appelle Xilium.CefGlue et avons eu un bon succès avec elle. Dans les cas où quelque chose ne fonctionne pas comme prévu, l'auteur est généralement très réactif aux problèmes ouverts dans le tracker bitbucket intégré
Jusqu'à présent, cela nous a bien servis. L'auteur met à jour sa bibliothèque pour prendre en charge les dernières versions du CEF3 et les corrections de bogues sur des bases régulières.
la source
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.
la source
Jetez un œil à la bibliothèque DotNetBrowser développée par l'équipe à laquelle j'appartiens. Il fournit des contrôles de navigateur WPF et WinForms basés sur Chromium, qui sont assez faciles à intégrer dans l'application .NET. Il prend en charge toutes les normes Web modernes, notamment HTML5, CSS3 et JavaScript. La page rendue ressemble exactement à Google Chrome.
La bibliothèque hérite de l'architecture multi-processus de Chromium - chaque page Web est rendue dans un processus Chromium distinct, et l'application continuera de fonctionner même après le plantage du plugin ou toute autre erreur inattendue sur la page Web.
Voici quelques autres fonctionnalités utiles, fournies par DotNetBrowser: il est possible d'écouter les événements de chargement, de gérer l'activité du réseau, de configurer le proxy, de simuler les actions des utilisateurs, de travailler avec des cookies, d'accéder et de modifier le DOM, d'écouter les événements du DOM, d'appeler JavaScript depuis .NET et vice versa, utilisez la caméra Web et un microphone sur la page Web, mis en place une communication basée sur WebRTC, et plus .
Consultez la 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:
Une fois que vous exécutez l'exemple ci-dessus, vous obtiendrez la sortie suivante:
La bibliothèque est commerciale. Les licences commerciales incluent des packages de support 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 sous forme de package NuGet et de package VSIX dans Visual Studio Marketplace.
la source
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 à peu près la seule approbation que je puisse lui donner.
la source
MISE À JOUR 2018 MAI:
Alternativement, vous pouvez intégrer le navigateur Edge, mais ne ciblant que Windows 10.
Voici la solution.
la source
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 génial. Vous bénéficiez de nombreux contrôles pour la mise en cache (images et contenu HTML), l'exécution de JavaScript, l'interception de téléchargements, etc. C'est aussi super rapide. L'isolation du processus signifie que lorsque le navigateur plante, il ne plante pas l'application.
Mais c'est aussi lourd, même la version de version ajoute environ 10 à 15 Mo (je ne me souviens plus du nombre exact) et donc une légère pénalité de démarrage. J'ai alors réalisé que le seul problème que j'avais avec le contrôle du navigateur IE était qu'il rejetterait 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, elle ne s'est jamais plantée (du moins pas parce que j'ai utilisé le contrôle du navigateur IE)
la source
IWebBrowser2
interface interne .Microsoft publie le contrôle WPF « Microsoft Edge WebView2 » qui nous offrira une excellente option gratuite pour intégrer Chromium dans Windows 10, Windows 8.1 ou Windows 7. Il est disponible via Nuget en tant que package
Microsoft.Web.WebView2
.la source