Le contrôle WebBrowser IE9 prendra-t-il en charge toutes les fonctionnalités d'IE9, y compris SVG?

84

J'ai récemment mis à jour vers IE9-beta. Maintenant, dans mon application WinForm .Net (3.5), je veux utiliser le WebBrowsercontrôle.

Ma question est donc de savoir si le WebBrowsercontrôle présentera toutes les propriétés et fonctions d'IE9?

Ma préoccupation est que je souhaite afficher des graphiques SVG dessus.

Omkar
la source

Réponses:

82

La «version» IE9 du contrôle WebBrowser, comme la version IE8, est en fait plusieurs navigateurs en un. Contrairement à la version IE8, vous avez un peu plus de contrôle sur le mode de rendu à l'intérieur de la page en changeant le doctype. Bien sûr, pour changer le mode du navigateur, vous devez configurer votre registre comme la réponse précédente. Voici un fragment de fichier reg pour FEATURE_BROWSER_EMULATION:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
"contoso.exe"=dword:00002328

Voici l'ensemble complet des codes:

  • 9999 (0x270F) - Internet Explorer 9. Les pages Web sont affichées en mode Normes IE9, quelle que soit la directive! DOCTYPE.
  • 9000 (0x2328) - Internet Explorer 9. Les pages Web contenant des directives! DOCTYPE basées sur des normes sont affichées en mode IE9.
  • 8888 (0x22B8) - Les pages Web sont affichées en mode Normes IE8, quelle que soit la directive! DOCTYPE.
  • 8000 (0x1F40) - Les pages Web contenant des directives! DOCTYPE basées sur des normes sont affichées en mode IE8.
  • 7000 (0x1B58) - Les pages Web contenant des directives! DOCTYPE basées sur des normes s'affichent en mode Normes IE7.

La documentation complète:

http://msdn.microsoft.com/en-us/library/ee330730%28VS.85%29.aspx#browser_emulation

Whitehawk
la source
8
Avec IE 9 installé, il ne semble pas possible d'obtenir le rendu d'une page en mode IE 8. La définition de la valeur sur 7000 met en mode IE 7 et 8000/8888/9000/9999 le met en mode IE 9. Si c'est une sorte de bug ou si c'est intentionnel, je ne sais pas cependant.
mikel le
2
J'ai dû ajouter la clé à la fois à current_user et local_machine avant qu'elle ne commence à fonctionner pour moi. Mais a réussi après.
Sarah Bailey
Cet article de blog, weblog.west-wind.com/posts/2012/feb/15/… mentionne que l'entrée de registre variera selon que Windows 32 bits ou 64 bits. 32 bits HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATIONet 64 bits HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION.
Richard Chambers
129

Le contrôle WebBrowser utilisera la version d'IE que vous avez installée, mais pour des raisons de compatibilité, il rendra les pages en mode Normes IE7 par défaut.

Si vous souhaitez profiter des nouvelles fonctionnalités d'IE9, vous devez ajouter la balise Meta <meta http-equiv="X-UA-Compatible" content="IE=9" >à l'intérieur de la <head>balise de votre page HTML.

Cette balise meta doit être ajoutée avant tout lien vers des fichiers CSS, JavaScript, etc. qui sont également dans votre <head>pour fonctionner correctement (seules les autres <meta>balises ou la <title>balise peuvent venir avant).

Une alternative consiste à ajouter une entrée de registre à:

HKLM> SOFTWARE> Microsoft> Internet Explorer> Principal> FeatureControl> FEATURE_BROWSER_EMULATION

Et là, ajoutez «myApplicationName.exe» avec la valeur «9000» pour forcer le contrôle WebBrowser à afficher les pages en mode IE9. Bien qu'il existe d' autres valeurs que vous pouvez également utiliser , notez que ces documents ne sont pas entièrement précis car il ne semble pas possible d'obtenir une page à afficher en mode IE 8 quelle que soit la valeur que vous utilisez.

L'ajout de la clé de registre au même chemin dans HKCU au lieu de HKLM fonctionnera également - cela est utile car l'écriture dans HKLM nécessite des privilèges d'administrateur, contrairement à HKCU.

mikel
la source
2
Les différentes valeurs de la partie de contenu peuvent être trouvées ici: msdn.microsoft.com/en-us/library/ie/ms533876(v=vs.85).aspx
KB
Si ce paramètre pouvait être stocké dans un fichier CSS, je serais plus heureux. Maintenant, je dois parcourir de nombreux documents ou existe-t-il une fonction de recherche et de remplacement multiligne dans Visual Studio?
KB
2
J'ai essayé la balise meta mais cela ne fonctionnait pas. J'obtenais un message d'erreur indiquant "HTML1115: balise META compatible X-UA ('IE = 9 ′) ignorée car le mode document est déjà finalisé.", Ce qui m'a conduit à la page Web evolpin.wordpress.com/2011/02/ 25 /… . La solution était alors de s'assurer que la balise meta était le premier élément à l'intérieur du bloc <head>.
Steg
21
Attention, si vous exécutez des applications 32 bits (qui appellent le MSIE 32 bits) sur un Windows 64 bits, l'entrée de registre doit être ajoutée à HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ MAIN \ FeatureControl \ FEATURE_BROWSER_EMULATION au lieu.
igordc
1
Je rendais du html via xsl / xslt et le regedit n'a pas fonctionné pour une raison quelconque ... La méta a fait l'affaire. Merci!
MazarD
25

Dieu merci, j'ai trouvé ça. Ce qui suit est extrêmement important:

<meta http-equiv="X-UA-Compatible" content="IE=9" >

Sans cela, aucun des rapports que j'avais générés ne fonctionnerait après l'installation d'IE9 bien qu'il ait parfaitement fonctionné dans IE8. Ils apparaissaient correctement dans un contrôle de navigateur Web, mais il y aurait des lettres manquantes, des espaces blancs surélevés, etc., lorsque j'appelais .Print (). C'était juste du HTML basique qui devrait pouvoir être rendu même dans Mosaic. heh Je ne sais pas pourquoi le mode de compatibilité IE7 se détraquait. Notamment, vous pouvez imprimer () la même page 5 fois et lui faire manquer des lettres différentes à chaque fois. Il serait même transféré dans la sortie PDF, donc c'est certainement le navigateur.

Geoff
la source
17

Une note sur Windows 64 bits qui semble faire trébucher quelques personnes. Si votre application s'exécute sous Windows 64 bits, vous devrez probablement définir le DWORD sous [HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BROWSER_EMULATION] à la place.

jtk
la source
16

Juste pour être complet ...

Pour le système d'exploitation 32 bits, vous devez ajouter une entrée de registre à:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION

*******OU*******

Pour le système d'exploitation 64 bits, vous devez ajouter une entrée de registre à:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION

Cette entrée doit être une DWORD, avec le nom étant le nom de votre exécutable, qui héberge le contrôle Webbrowser; c'est à dire:

myappname.exe (NE PAS UTILISER "Contoso.exe" comme dans la page Web MSDN ... c'est juste un nom d'espace réservé)

Donnez-lui ensuite une DWORDvaleur, selon le tableau sur:

http://msdn.microsoft.com/en-us/library/ee330730(v=vs.85).aspx#browser_emulation

J'ai changé en 11001 décimal ou 0x2AF9 hex --- (IE 11 EMULATION) car ce n'est pas la valeur DEFAULT (si vous avez IE 11 installé - ou quelle que soit la version).

Cet article MSDN contient des notes sur plusieurs autres modifications du Registre qui affectent le comportement du navigateur Web d'Internet Explorer.

user3175394
la source
1
La partie DWORD est très importante. QWORD ne fonctionnera pas et on peut facilement faire cette erreur.
pvieira
J'ajouterais que, lorsque vous déboguez sous VS, vous devez également ajouter une entrée pour myappname.vshost.exe. D'un autre côté, je soupçonne que le simple lancement de l'application hors du débogueur, puis dans le débogueur, ferait également l'affaire. Je pense que cela a fonctionné une fois pour moi; mais je ne suis pas sûr à 100%.
Papa Schtroumpf le
1
En raison de ma configuration IE11, je devais ouvrir IE11 et ajouter l'URL de destination à mes sites de confiance. Sans cela, même si mon registre était correctement configuré, les scripts de page ne s'exécuteraient pas.
Tony
15

Je sais que ce fil est ancien et qu'il existe déjà des réponses complètes.

Juste au cas où vous ne le sauriez pas:

<meta http-equiv="X-UA-Compatible" content="IE=edge" >

Vous n'avez pas besoin de coder en dur le numéro de version d'IE comme

<meta http-equiv="X-UA-Compatible" content="IE=9" >

Tyler Long
la source
Ceci n'est pas lié au problème - le contrôle WebBrowser se charge uniquement en mode IE7 à moins d'être remplacé par un paramètre de registre pour votre programme particulier.
Christian
4
@Christian Êtes-vous sûr? Pour autant que je <meta http-equiv="X-UA-Compatible" content="IE=edge" >sache , si la page Web contient dans l'en-tête, le webBrowser se chargera dans le dernier mode IE. Pourquoi y a-t-il plus de 90 votes positifs à la réponse de Mikel? parce que sa solution fonctionne. La modification du registre n'est pas nécessaire si vous pouvez modifier la page Web.
Tyler Long
Je suis 100% positif, mais je pense que cela dépend aussi de l'emplacement du site Web. J'ai chargé du contenu local et la seule façon dont la version changerait est via le registre. Croyez-moi, je jetterais la solution de registre pour tout ce qui fonctionne, mais rien d'autre ne semblait fonctionner.
Christian
ie = bord a fonctionné pour moi, sans que je touche le registre. Merci!
Yisroel M. Olewski
@Christian c'est en effet lié à la question - la solution fonctionne bien.
MarzSocks
6

Je suis tout à fait d'accord avec la solution proposée, mais je pense qu'une petite clarification est importante, je pense, pourrait être nécessaire.

Pour chaque processus (lire aussi: vshost.exe, yourWinformApplication.exe.svchost, ou le nom de votre application.exe) qui devra ajouter un DWORD avec la valeur fournie, dans mon cas je laisse 9000 (en décimal) en application nom et script en douceur et sans erreur.

l'erreur la plus courante est de croire qu'il est nécessaire d'ajouter "contoso.exe" TEL QUEL et de penser que tout fonctionne!

Alfred Severo
la source
3

Oui, le contrôle WebBrowser utilise la version d'IE que vous avez installée. Cela signifie bien sûr que si vous exécutez votre application sur une machine avec IE 8, les fonctionnalités d'IE 9 dont vous dépendez ne seront pas disponibles.

Josh
la source
2
Relisez ma réponse. Le vote défavorable était déplacé. J'ai dit que s'il essayait d'utiliser les fonctionnalités IE9 puis se déploie sur une machine sans IE9, ces fonctionnalités ne fonctionneront pas. Votre paramètre de registre de compatibilité descendante ne changera pas ce fait.
Josh
16
Votre première phrase est manifestement fausse. Votre deuxième phrase, à tout le moins, est à la fois évidente et paresseuse. BTW merci pour le vote défavorable. Très mature.
whitehawk
3
Le contrôle WebBrowser utilise n'importe quelle version d'IE installée; cependant, le script de détection peut ne pas s'en rendre compte. Essayez ceci [site ( whatismybrowser.com/) </font> [ 1] . Je sais que d'autres sites m'ont donné des informations erronées, mais ce site a correctement identifié le navigateur comme la version d'IE installée sur ma machine. [1]: whatismybrowser.com
cjbarth
3

Je suis venu à cette solution et cela n'a pas fonctionné pour moi! Parce que j'utilisais 64 bits, j'ai dû remplacer le registre:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION

Au lieu de celui dont tout le monde parle:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
Tono Nam
la source
1

J'ai aimé le code (C #) ci-dessous qui définit les paramètres de registre pour votre application. Je ne sais pas s'il le coupera après l'installation si des autorisations sont nécessaires. Pour moi, cela a résolu un problème avec WebSocket qui n'était pas disponible dans un contrôle WebBrowser dans WPF.

Appel Ajax du navigateur Web C #

Dirk Bester
la source
1

J'ai eu le même problème et les réponses du registre n'ont pas fonctionné.

J'avais un contrôle de navigateur dans la nouvelle version de mon programme qui fonctionnait bien sur XP, échouait dans Windows 7 (64 bits). L'ancienne version fonctionnait à la fois sur XP et Windows 7.

La page Web affichée dans le navigateur utilise un plugin étrange pour afficher les anciennes cartes SVG (je pense que c'est une applet Java).

Il s'avère que le problème est lié à la protection DEP dans Windows 7.

Les anciennes versions de dotnet 2 ne définissaient pas l'indicateur requis DEP dans l'exe, mais à partir de dotnet 2, SP 1, il l'a fait (oui, le comportement de compilation et donc le comportement d'exécution de l'exe ont changé en fonction de la machine sur laquelle vous avez compilé, bien. ..).

Il est documenté sur un blog MSDN NXCOMPAT et le compilateur C # . Pour citer: Cela surprendra sans aucun doute quelques développeurs ... téléchargez un service pack de framework, recompilez, exécutez votre application, et vous obtenez maintenant des exceptions IP_ON_HEAP.

L'ajout de ce qui suit à la post build dans Visual Studio, désactive DEP pour l'exe et tout fonctionne comme prévu:

all "$(DevEnvDir)..\tools\vsvars32.bat"
editbin.exe /NXCOMPAT:NO "$(TargetPath)"
Dave Glassborow
la source
-3

Concernant la réponse acceptée de whitehawk. J'essaie simplement d'ajouter un peu d'expérience pratique. J'essayais juste d'ajouter un commentaire, mais SO se plaint que c'est trop long.

Fondamentalement, sans IE 9 installé, le commutateur de registre FEATURE_BROWSER_EMULATION ne fonctionnera pas DU TOUT.

Par exemple, ma propre expérience aujourd'hui, j'essayais de faire fonctionner le contrôle Web .net avec le mode IE10 car un html que j'essaie de rendre ne fonctionnera pas avec .netControl sous VS2012, et ne fonctionnera même pas lorsque je charge le html dans IE8 directement, css ne sera toujours pas rendu correctement (même après avoir dit autoriser le contenu bloqué). Mais j'ai testé le même html ok avec IE10 sur la machine win 8 d'un ami. C'est pourquoi j'essaie de définir le .net webControl en mode IE 10, mais continue à échouer ...

Maintenant, je pensais que c'était bcos que ma machine win 7 n'avait qu'IE8 installé, donc quelle que soit la valeur que j'ai définie sur le commutateur FEATURE_BROWSER_EMULATION (valeur à IE9, IE10 IE11), cela ne fonctionnera tout simplement pas!

Ensuite, j'ai téléchargé et installé IE 10 sur ma machine win 7. Cela ne fonctionnera toujours pas, alors j'ai ajouté FEATURE_BROWSER_EMULATION, cela a commencé à fonctionner!

De plus, j'ai remarqué quelle que soit la valeur que j'ai définie, même la valeur 0 par défaut, le webControl utilise toujours le mode IE 10 qui fonctionne toujours pour moi.

Donc, pour résumer, si IE X est installé mais que vous voulez que votre .Net webControl fonctionne sous IE (X + N) N> 0 modo, DEUX choses que vous devez faire:

  1. Accédez au site Web MS et téléchargez et installez IE (X + N) sur votre machine, vous devrez redémarrer après l'installation.

  2. appliquez la réponse de whitehawk.

Fondamentalement: pour contrôler la valeur de cette fonctionnalité à l'aide du Registre, ajoutez le nom de votre fichier exécutable au paramètre suivant et définissez la valeur pour correspondre au paramètre souhaité.

HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER)
   SOFTWARE
      Microsoft
         Internet Explorer
            Main
               FeatureControl
                  FEATURE_BROWSER_EMULATION
                     contoso.exe = (DWORD) 00009000

Windows Internet Explorer 8 et versions ultérieures. La fonctionnalité FEATURE_BROWSER_EMULATION définit le mode d'émulation par défaut pour Internet Explorer et prend en charge les valeurs suivantes.

Description de la valeur

  • 11001 (0x2AF9 Internet Explorer 11. Les pages Web sont affichées en mode périphérique IE11, quelle que soit la directive! DOCTYPE.

    11000 (0x2AF8) IE11. Les pages Web contenant des directives! DOCTYPE basées sur des normes sont affichées en mode périphérique IE11. Valeur par défaut pour IE11.

    10001 (0x2711) Internet Explorer 10. Les pages Web sont affichées en mode Normes IE10, quelle que soit la directive! DOCTYPE.

    10000 (0x02710) Internet Explorer 10. Les pages Web contenant des directives! DOCTYPE basées sur des normes s'affichent en mode Normes IE10. Valeur par défaut pour Internet Explorer 10.

    9999 (0x270F) Windows Internet Explorer 9. Les pages Web s'affichent en mode Normes IE9, quelle que soit la directive! DOCTYPE.

    9000 (0x2328) Internet Explorer 9. Les pages Web contenant des directives! DOCTYPE basées sur des normes sont affichées en mode IE9. Valeur par défaut pour Internet Explorer 9.

    Important Dans Internet Explorer 10, les pages Web contenant des directives! DOCTYPE basées sur des normes s'affichent en mode Normes IE10.

    8888 (0x22B8) Les pages Web s'affichent en mode Normes IE8, quelle que soit la directive! DOCTYPE.

    8000 (0x1F40) Les pages Web contenant des directives! DOCTYPE basées sur des normes sont affichées en mode IE8. Valeur par défaut pour Internet Explorer 8 Important Dans Internet Explorer 10, les pages Web contenant des directives! DOCTYPE basées sur des normes s'affichent en mode Normes IE10.

    7000 (0x1B58) Les pages Web contenant des directives! DOCTYPE basées sur des normes s'affichent en mode Normes IE7. Valeur par défaut pour les applications hébergeant WebBrowser Control.

Réf complet ici

Gob00st
la source
without IE 9 installed, the registry switch EATURE_BROWSER_EMULATION won't work AT ALL.- c'est faux. Je n'ai installé que IE8 et je peux parfaitement utiliser le commutateur pour mettre le navigateur Web dans différents modes de rendu.
GSerg
J'ai essayé IE8 installé en essayant d'obtenir le mode IE10, ne fonctionnera pas du tout! Je viens de réessayer, cela n'a pas fonctionné
Gob00st