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
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
et 64 bitsHKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
.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 à:
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.
la source
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.
la source
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.
la source
Juste pour être complet ...
Pour le système d'exploitation 32 bits, vous devez ajouter une entrée de registre à:
*******OU*******
Pour le système d'exploitation 64 bits, vous devez ajouter une entrée de registre à:
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
DWORD
valeur, 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.
la source
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" >
la source
<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.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!
la source
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.
la source
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:
Au lieu de celui dont tout le monde parle:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
la source
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 #
la source
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)"
/headers
affichera le paramètre DEP sur un exe.la source
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:
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.
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
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.