web-dev-qa-db-fra.com

Alternative WebBrowser C # WPF

J'ai besoin d'un navigateur Web dans mon application .NET 3.5 et je ne souhaite pas utiliser le navigateur Web par défaut (car il semble lent et buggé). J'ai essayé le chrome de Chris Cavanagh, mais je ne pouvais pas le faire fonctionner. Y a-t-il des alternatives plus faciles à utiliser? Je cherche quelque chose de très simple et léger sur l'ordinateur, il hébergera une boutique en ligne si cela compte.

MISE À JOUR: 5 ans plus tard, le besoin s'en est ressenti. À l’époque, j’utilisais Awesomium pour afficher le navigateur Web dans mon programme, tbh, je ne me souviens pas comment cela s’est passé, mais je ne me souviens pas non plus que c’était vraiment pénible. 

Aujourd'hui, cependant, je voulais l'utiliser à nouveau et je constate que le code a été fermé et qu'il est désormais commercial. Nous avons essayé, avons rencontré un obstacle, ne pouvant pas modifier le code pour fonctionner comme nous le souhaitions, nous avons donc opté pour la voie de l'open source avec CEF et CefSharp , afin de voir le code utilisé tellement plus facile et moins voodoo (ffs, awesomium même obscurcir leur code afin que je ne puisse pas comprendre ce que je fais mal).

En gros, Awesomium est cool si vous voulez payer 2900 $ et n'avez pas besoin de rendu hors écran, mais CEF est tellement plus puissant qu'il peut changer le code selon vos besoins.

PS. Nous avons essayé CefGlue pendant 5 minutes, cela n’a pas fonctionné immédiatement, nous avons donc opté pour CefSharp, qui a immédiatement fonctionné. C’est la grande et terrible chose à propos de deux frameworks open source concurrents.

37
Ziv

Commander mon nouveau projet: https://github.com/chillitom/CefSharp

Cela apporte la structure Chromium Embedded Framework à .Net/C #. Voir la page Github pour les sources, les binaires et des exemples. 

Caractéristiques:

  • un contrôle du navigateur avec des commandes de navigation
  • Événements INotifyPropertyChanged
  • ExecuteJavascript
  • Enregistrez vos propres gestionnaires de schéma/protocole
  • intercepter les téléchargements de ressources
  • lier les objets CLR au contexte JavaScript de Chromium.

Il en est encore au stade pré-alpha, donc tous les commentaires ont été appréciés.

15
chillitom

J'ai eu de la chance en utilisant GeckoFX dans une application de formulaire C # win. Voici le Getting Started article , qui explique les dépendances à installer pour le rendre opérationnel.

5
tbreffni

Jetez un coup d’œil à la bibliothèque DotNetBrowser . Il fournit des contrôles de navigateur WPF et WinForms basés sur Chromium, qui sont assez faciles à intégrer dans une application .NET. Il prend en charge toutes les normes Web modernes, 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 processus Chromium distinct et l'application continue de fonctionner même après la panne du plug-in ou toute autre erreur inattendue sur la page Web.

DotNetBrowser fournit d’autres fonctionnalités utiles: il est possible d’écouter des événements de charge, de gérer l’activité du réseau, de configurer un proxy, de simuler les actions de l’utilisateur, de travailler avec des cookies, d’accéder et de modifier DOM, d’écouter des événements DOM, d’appeler JavaScript depuis. et inversement, utilisez la caméra Web et le microphone sur la page Web, configurez la communication WebRTC et plus

Consultez le Référence de l'API pour plus de détails.

L'extrait de code ci-dessous montre comment créer un BrowserView, l'intégrer à 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 avez exécuté l'exemple ci-dessus, vous obtiendrez le résultat suivant:

 enter image description here

La bibliothèque est commerciale, mais son utilisation est gratuite dans les projets Open-Source et Academic. Les licences commerciales incluent des packages de support pour différentes tailles d’équipes. Il est également possible d’acheter le code source de la bibliothèque.

Outre sa propre page, le composant est disponible en tant que package NuGet et/ package VSIX dans Visual Studio Marketplace.

2
Vladimir

Si vous utilisez Windows Forms, c'est plus facile avec le contrôle WebBrowser intégré. Si vous utilisez également WPF, le contrôle WebBrowser à partir de WPF convient parfaitement. Cependant, le comportement de WPF et WinForm est différent.

Dans WPF, chaque pixel est rendu différemment que dans WinForms. Vous pouvez afficher content par-dessus un contrôle WebBrowser en utilisant cette méthode:

http://karlshifflett.wordpress.com/2009/06/13/wpf-float-buttons-over-web-browser-control/

Toutefois, si vous souhaitez créer une fenêtre personnalisée et afficher un contrôle WebBrowser sur une fenêtre transparente, le contrôle WebBrowser n'est pas affiché. Il existe des solutions de contournement, mais la plupart d’entre elles sont compliquées. Enfer, on a même recommandé de dessiner une fausse interface WPF derrière un WinForms. Codes mal couplés et plus de sphagetti.

J'ai essayé cela pendant une journée entière. Ce sont toutes les ressources que j'ai rassemblées à ce sujet. La tâche suivante pour vous consiste à les compiler et à comprendre les choses. Cela vous met sur le même bateau que moi.

WPF WebBrowser (3.5 SP1) Toujours au premier plan - autre suggestion d'afficher le code HTML dans WPF }

_ { http://blogs.msdn.com/b/changov/archive/2009/01/19/webbrowser-control-on-transparent-wpf-window.aspx }

http://msdn.Microsoft.com/en-us/library/ms742522.aspx

_ { http://www.neowin.net/forum/topic/646970-c%23-wpf-window-with-transparency-makes-windowsformshost-apparient/

Actuellement, j'ai abandonné le contrôle WebBrowser et je me lance dans le projet Awesomium. Essayer de le faire fonctionner est un autre problème car les codes sont répartis sur différentes versions de .NET. Si vous avez de la chance, partagez-le ici.

Vous pouvez également voir ce projet pour des commandes plus faciles à utiliser pour les navigateurs Web.

_ { http://www.khrona.com/products/awesomium/

Une fois encore, WinForms n’a aucun problème avec le contrôle WebBrowser, WPF en a d’innombrables et MS n’a pas envie de réparer les choses plus tôt.

2
r3st0r3

Je ne suis pas sûr qu'il y ait autant d'alternatives, http://webkitdotnet.sourceforge.net/ n'en est qu'une. Je pense que c’est un contrôle WinForms plutôt que WPF, alors il faudra peut-être un peu de saut dans les anneaux pour le faire fonctionner.

1
mikel

Je pense que vous pouvez incorporer le moteur Web Gecko en tant qu'objet COM et l'utiliser comme contrôle .NET standard. (Firefox utilise Gecko)

Essayez ce lien: https://developer.mozilla.org/en/Gecko

0
ManAmongHippos

J'ai trouvé une série de FAQ sur ce sujet sur http://www.syncfusion.com/faq/windowsforms/faq_c100c.aspx

mais je n'ai pas essayé moi-même.

0
Alexey Zimarev

Voir http://code.google.com/p/chromiumembedded/ project qui fournit un cadre pour l'intégration du navigateur Chromium (WebKit) dans différents cadres d'interface utilisateur.

Il existe un lien vers une implémentation .NET/Mono https://bitbucket.org/xilium/xilium.cefglue

0
Alex Burtsev