479 votes

Remplacer le contrôle WebBrowser de .NET par un meilleur navigateur, comme Chrome ?

Existe-t-il un moyen relativement simple d'insérer un navigateur moderne dans une application .NET ?

D'après ce que j'ai compris, le contrôle WebBrowser est une enveloppe pour IE, ce qui ne poserait pas de problème si ce n'est qu'il semble s'agir d'une très ancienne version d'IE, avec tout ce que cela implique en termes d'erreurs CSS, de risques potentiels pour la sécurité (si le moteur de rendu n'a pas été corrigé, puis-je vraiment m'attendre à ce que les milliards de problèmes de dépassement de tampon soient résolus ?

J'utilise Visual Studio C# (édition express - est-ce que cela fait une différence ici ?)

J'aimerais intégrer un bon navigateur web dans mes applications. Dans certaines d'entre elles, je l'utilise simplement pour gérer le processus d'enregistrement de l'utilisateur, l'interface avec certaines des fonctionnalités de mon site Web et d'autres choses de cet ordre, mais j'ai une autre application en tête qui nécessitera davantage de contrôle.

J'en ai besoin :

  • Un navigateur qui peut s'intégrer à l'intérieur d'une fenêtre de mon application (pas une fenêtre séparée)
  • Un bon support pour les CSS, js et autres technologies web, à la hauteur de tout navigateur moderne.
  • Fonctions de base du navigateur comme "naviguer", "retour", "recharger"...
  • Accès libéral au code et à la sortie de la page.

Je pensais à Chrome, puisqu'il est sous licence BSD, mais je serais tout aussi heureux avec une version récente d'IE.

Dans la mesure du possible, j'aimerais que les choses restent simples. L'idéal serait de pouvoir patcher le contrôle WebBrowser existant, qui fait déjà environ 70% de ce dont j'ai besoin, mais je ne pense pas que ce soit possible.

J'ai trouvé un contrôle ActiveX pour Mozilla ( http://www.iol.ie/~locka/mozilla/control.htm ) mais il semble que ce soit une ancienne version, donc ce n'est pas forcément une amélioration.

Je suis ouvert aux suggestions

19 votes

Pourquoi dites-vous que le contrôle WebBrowser utilise une ancienne version d'IE ? Il utilise la version installée sur le système de l'utilisateur, bien que le WebBrowser IE8 semble utiliser par défaut le rendu IE7 : blogs.msdn.com/ie/archive/2009/03/10/

21 votes

Parce que ce n'est pas le cas sur ma machine. J'ai installé IE8 mais le contrôle présente des problèmes d'affichage que je n'ai pas vus depuis IE 5. Un formulaire de connexion très simple, 2 champs avec une touche de CSS a un affichage déformé, et l'affichage de certains javascript ne fonctionne pas, alors qu'il s'affiche bien dans IE8, Firefox, Chrome, Opera ... donc j'ai supposé que le moteur de rendu était ancien. Je peux me tromper complètement et peut-être que le problème est en fait différent de ce que je pensais.

3 votes

@Sylverdrag : Vous avez tort. Il utilise le dernier IE de votre système. Cependant, j'ai lu quelque part que le contrôle WebBrowser a un problème de rétrocompatibilité plus fort que le navigateur autonome. IE8 peut avoir, par exemple, une icône à cliquer pour activer le mode IE7. Dans le cadre de votre programme, ce n'est pas possible, donc le contrôle passe par défaut au mode précédent pour des raisons de compatibilité. Par contre, je n'ai pas lu comment le configurer pour utiliser le "mode IE8".

194voto

chillitom Points 5731

Je viens de sortir une version pré-alpha de CefSharp mon .Net pour les Cadre embarqué Chromium . Il se peut qu'ils soient un peu trop rudes pour vos besoins à ce stade, mais j'espère améliorer les choses au cours des prochaines semaines/mois.

Jetez-y un coup d'œil et donnez-moi votre avis : https://github.com/chillitom/CefSharp

Sous licence BSD

Mise à jour 6/2012 La bibliothèque n'est plus de qualité alpha - en fait, les liaisons sont utilisées dans un certain nombre de projets importants, notamment le client Windows de Rdio, Facebook Messenger pour Windows et Github pour Windows.

0 votes

+1 sur cette réponse. Aujourd'hui, il est activement développé sur une version publiée basée sur Chromium 25.0.1364.152.

3 votes

Je suis passé d'OWS à CEfSharp, et je peux affirmer qu'il est de très haute qualité et que la communauté est active. Je l'adore. github.com/cefsharp/CefSharp

3 votes

CefSharp est génial, mais sachez que les bibliothèques sont très volumineuses (plus de 20 Mo aux dernières nouvelles) et qu'elles ne conviennent pas forcément à un projet plus léger.

84voto

Chris S Points 32376

Si vous ne le saviez pas, Chrome utilise Webkit, qui est également utilisé par Safari. Voici quelques questions qui vont dans le même sens :

Celui de webkit n'est pas génial comme le dit l'autre réponse, une version ne fonctionne plus (celle de google code) et celui de Mono est expérimental. Ce serait bien si quelqu'un faisait l'effort de faire un wrapper .NET décent pour lui mais ce n'est pas quelque chose que quelqu'un semble vouloir faire - ce qui est surprenant étant donné qu'il a maintenant le support pour HTML5 et tant d'autres fonctionnalités que le moteur IE(8) n'a pas.

Mise à jour

Il existe un nouveau projet à double licence qui vous permet d'intégrer Chrome dans vos applications .NET, appelé Awesomium . Il est fourni avec une api .NET mais nécessite quelques bidouillages pour le rendu (les exemples dessinent la fenêtre du navigateur dans un tampon, peignent le tampon comme une image et rafraîchissent sur une minuterie).

I pensez à il s'agit du navigateur utilisé par Origin dans Battlefield 3.

0 votes

Merci. Je vais jeter un coup d'œil au wrapper Gecko. Une chose cependant, la réponse originale dit "Tout ce que vous devez faire est d'enregistrer le contrôle Mozilla ActiveX" et je pensais que les éditions Express ne pouvaient pas enregistrer de contrôles supplémentaires. Est-ce que j'ai raté quelque chose d'évident ?

4 votes

@Syl les éditions express peuvent enregistrer autant de contrôles que nécessaire. Ce qu'elles ne font pas, c'est vous laisser installer des plugins pour Visual Studio.

1 votes

J'ai eu de très mauvaises expériences dans l'utilisation de WebKit avec C# et j'ai finalement dû me contenter du composant de navigateur web par défaut fourni avec .NET.

68voto

Unavailable Points 1514

J'ai testé des alternatives au composant de navigateur Web C# pendant quelques jours maintenant et voici ma liste :

1. Utiliser les nouvelles versions d'IE 8 et 9 :

Le composant de navigateur Web C# est IE7 et non IE8 ? Comment changer cela ?

Pour :

  • Peu de travail nécessaire pour le faire fonctionner
  • un certain support HTML5/CSS3 si IE9, complet si IE10

Cons :

  • La machine cible doit avoir la version cible d'IE installée, IE10 est toujours en aperçu sur Win7.

Cela ne demande pas beaucoup de travail et vous pouvez obtenir un certain support HTML5 et CSS3 bien qu'il manque à IE9 certaines des meilleures fonctionnalités CSS3 et HTML5. Mais je suis sûr que vous pouvez faire fonctionner IE10 de la même manière. Le problème est que le système cible doit avoir IE10 installé, et comme il est encore en phase de prévisualisation sur Windows 7, je ne le conseille pas.

2. OpenWebKitSharp

OpenWebKitSharp est un wrapper .net pour le moteur webkit basé sur le projet WebKit.NET 0.5. WebKit est un moteur de mise en page utilisé par Chrome/Safari.

Pour :

  • Développé activement
  • Support HTML5/CSS3

Cons :

  • De nombreuses fonctionnalités ne sont pas mises en œuvre
  • Ne supporte pas x64 (l'application doit être construite pour x86)

OpenWebKit est très bien, bien que de nombreuses fonctionnalités ne soient pas encore mises en œuvre. J'ai rencontré quelques problèmes en l'utilisant avec Visual Studio, qui jette des références d'objet nulles ici et là en mode conception, il y a quelques problèmes de js. Toute personne l'utilisant remarquera presque immédiatement que l'alerte js ne fait rien. Les événements comme mouseup, mousedown... etc. ne fonctionnent pas, le drag and drop en js est bogué et ainsi de suite...

J'ai également eu quelques difficultés à l'installer car il nécessite l'installation d'une version spécifique du redistributeur VC, donc après l'exception, j'ai regardé le journal des événements, trouvé la version de VC et l'ai installée.

3. GeckoFX

Pour :

  • Fonctionne sur le mono
  • Développé activement
  • Support HTML5/CSS3

Cons :

  • Ne supporte pas x64 (l'application doit être construite pour x86)

GeckoFX est un contrôle de navigateur Web multiplateforme à intégrer dans les applications WinForms. Il peut être utilisé avec .NET sur Windows et avec mono sur Linux. Gecko est un moteur de mise en page utilisé par Firefox.

Je suis tombé sur quelques informations que GeckoFX n'est pas activement développé ce qui n'est pas vrai, bien sûr il est toujours une ou deux versions en retard de Firefox mais c'est normal, j'ai été vraiment impressionné par l'activité et le contrôle lui-même. Il fait tout ce dont j'ai besoin, mais j'ai eu besoin de temps pour le faire fonctionner, voici un petit tutoriel pour le faire fonctionner :

  1. Télécharger GeckoFx-Windows-16.0-0.2 Ici, vous pouvez vérifier si une version plus récente est disponible. GeckoFX
  2. Ajouter des références à deux dll téléchargées
  3. Comme GeckoFX est un wrapper, vous avez besoin de XulRunner, allez à Liste des versions pour voir lequel vous avez besoin
  4. Maintenant que nous savons de quelle version de XulRunner nous avons besoin, nous allons à Publication de Mozilla XulRunner Pour cela, allez dans le dossier version -> runtimes -> xulrunner-(votre_version).en-US.win32.zip, dans notre cas xulrunner-16.0.fr-US.win32.zip
  5. Dézippez tout et copiez tous les fichiers dans votre poubelle. \Debug (ou release si votre projet est réglé sur release)
  6. Allez dans le concepteur Visual Studio de votre formulaire, allez dans la boîte à outils, faites un clic droit à l'intérieur -> Choisissez les éléments -> Parcourez -> Trouvez le fichier dll winforms téléchargé de GeckoFX -> OK.
  7. Maintenant vous devriez avoir un nouveau contrôle GeckoWebBrowser

Si vous devez absolument utiliser Chrome, jetez un coup d'œil à ce produit appelé Awesomium Il est gratuit pour les projets non-commerciaux, mais la licence coûte quelques milliers de dollars pour les projets commerciaux.

5 votes

Très bonne description de la façon de mettre en place et de faire fonctionner GeckoFx. +1

0 votes

Lors de la construction de Geckofx-Winforms, j'ai eu besoin de 4 bibliothèques gtk# (atk-sharp, gdk-sharp, glib-sharp et gtk-sharp), j'ai donc dû installer Mono en premier.

0 votes

Cette réponse est spectaculaire.

28voto

golavietnam Points 221

Vous pouvez utiliser le registre pour définir la version d'IE pour le contrôle du navigateur Web. Allez-y : HKLM \SOFTWARE\Microsoft\Internet Explorer \Main\FeatureControl\FEATURE_BROWSER_EMULATION et ajoutez "yourApplicationName.exe" à la valeur de browser_emulation. Pour voir la valeur de browser_emulation, référez-vous au lien : http://msdn.microsoft.com/en-us/library/ee330730%28VS.85%29.aspx#browser_emulation

12 votes

Et si vous déboguez dans Visual Studio, vous devrez probablement utiliser "votreNomApplication.vshost.exe".

3 votes

Et si vous déboguez dans Visual Studio, vous pouvez probablement décocher "Activer le processus d'hébergement de Visual Studio" dans l'onglet Débogage des propriétés de votre projet. Vous pouvez alors utiliser le nom de votre exe sans la partie "vshost".

2 votes

@golavietnam Pouvez-vous s'il vous plaît m'aider avec ceci, j'ai essayé vos instructions et en utilisant les instructions sur le lien que vous avez fourni mais cela ne fonctionne toujours pas. Lorsque je visite WhatIsMyBrowser.com en utilisant le contrôle du navigateur web, il me dit que j'utilise ie11 MAIS dans ie 7 en mode de compatibilité et de nombreux sites web refusent de fonctionner et me donnent un message "please upgrade your browser". Comment puis-je forcer le contrôle du navigateur web pour utiliser la dernière version de ie qui est installée (ie11) cette façon ne fonctionne pas, je l'ai essayé une centaine de fois.

18voto

RichieHindle Points 98544

Regardez le Mono.WebBrowser Il intègre Gecko (tel qu'utilisé par Firefox) ou WebKit (tel qu'utilisé par Safari) dans WinForms (sans utiliser ActiveX).

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