Unterstützt das IE9 WebBrowser Control alle Funktionen von IE9, einschließlich SVG?


84

Ich habe kürzlich ein Upgrade auf IE9-Beta durchgeführt. Jetzt möchte ich in meiner .Net (3.5) WinForm-Anwendung die WebBrowserSteuerung verwenden.

Meine Frage ist also, ob das WebBrowserSteuerelement alle Eigenschaften und Funktionen von IE9 aufweist.

Ich mache mir Sorgen, ich möchte einige SVG-Grafiken darauf rendern.

Antworten:


82

Die IE9- "Version" des WebBrowser-Steuerelements besteht wie die IE8-Version aus mehreren Browsern in einem. Im Gegensatz zur IE8-Version haben Sie etwas mehr Kontrolle über den Rendermodus innerhalb der Seite, indem Sie den Doctype ändern. Um den Browsermodus zu ändern, müssen Sie natürlich Ihre Registrierung wie in der vorherigen Antwort festlegen. Hier ist ein Registrierungsdateifragment für 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

Hier ist der komplette Satz von Codes:

  • 9999 (0x270F) - Internet Explorer 9. Webseiten werden unabhängig von der Anweisung! DOCTYPE im IE9-Standardmodus angezeigt.
  • 9000 (0x2328) - Internet Explorer 9. Webseiten mit standardbasierten! DOCTYPE-Anweisungen werden im IE9-Modus angezeigt.
  • 8888 (0x22B8) - Webseiten werden unabhängig von der Anweisung! DOCTYPE im IE8-Standardmodus angezeigt.
  • 8000 (0x1F40) - Webseiten mit standardbasierten! DOCTYPE-Anweisungen werden im IE8-Modus angezeigt.
  • 7000 (0x1B58) - Webseiten mit standardbasierten! DOCTYPE-Anweisungen werden im IE7-Standardmodus angezeigt.

Die vollständigen Dokumente:

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


8
Wenn IE 9 installiert ist, scheint es nicht möglich zu sein, eine Seite im IE 8-Modus zu rendern. Wenn Sie den Wert auf 7000 setzen, wird der IE 7-Modus aktiviert, und durch 8000/8888/9000/9999 wird der IE 9-Modus aktiviert. Ob dies eine Art Fehler ist oder ob es beabsichtigt ist, weiß ich allerdings nicht.
Mikel

2
Ich musste den Schlüssel sowohl zu current_user als auch zu local_machine hinzufügen, bevor er für mich funktionieren würde. War aber danach erfolgreich.
Sarah Bailey

In diesem Blog-Beitrag, weblog.west-wind.com/posts/2012/feb/15/…, wird erwähnt, dass der Registrierungseintrag je nach 32-Bit- oder 64-Bit-Windows variiert. 32 Bit HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATIONund 64 Bit HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION.
Richard Chambers

129

Das WebBrowser-Steuerelement verwendet die von Ihnen installierte IE-Version. Aus Kompatibilitätsgründen werden Seiten jedoch standardmäßig im IE7-Standardmodus gerendert.

Wenn Sie die neuen IE9-Funktionen nutzen möchten, sollten Sie das Meta-Tag <meta http-equiv="X-UA-Compatible" content="IE=9" >in das <head>Tag Ihrer HTML-Seite einfügen.

Dieses Meta-Tag muss hinzugefügt werden, bevor Links zu CSS, JavaScript-Dateien usw., die sich ebenfalls in Ihrem befinden <head>, ordnungsgemäß funktionieren (nur andere <meta>Tags oder das <title>Tag können davor stehen).

Eine Alternative besteht darin, einen Registrierungseintrag hinzuzufügen zu:

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

Fügen Sie dort 'myApplicationName.exe' mit dem Wert '9000' hinzu, um das WebBrowser-Steuerelement zu zwingen, Seiten im IE9-Modus anzuzeigen. Obwohl es auch andere Werte gibt, die Sie verwenden können , beachten Sie, dass diese Dokumente nicht ganz korrekt sind, da es nicht möglich zu sein scheint, eine Seite im IE 8-Modus zu rendern, unabhängig davon, welchen Wert Sie verwenden.

Das Hinzufügen des Registrierungsschlüssels zu demselben Pfad in HKCU anstelle von HKLM funktioniert ebenfalls. Dies ist nützlich, da für das Schreiben in HKLM Administratorrechte erforderlich sind, während dies bei HKCU nicht der Fall ist.


2
Die verschiedenen Werte für den Inhaltsteil finden Sie hier: msdn.microsoft.com/en-us/library/ie/ms533876(v=vs.85).aspx
KB

Wenn diese Einstellung in einer CSS-Datei gespeichert werden könnte, wäre ich glücklicher. Jetzt muss ich viele Dokumente durchgehen oder gibt es in Visual Studio eine mehrzeilige Such- und Ersetzungsfunktion?
KB

2
Ich habe das Meta-Tag ausprobiert, aber es würde nicht funktionieren. Ich erhielt die Fehlermeldung "HTML1115: X-UA-kompatibles META-Tag ('IE = 9') wird ignoriert, da der Dokumentmodus bereits abgeschlossen ist.", Die mich zur Webseite evolpin.wordpress.com/2011/02/ führte. 25 /… . Die Lösung bestand dann darin, sicherzustellen, dass das Meta-Tag das erste Element innerhalb des <head> -Blocks war.
Steg

21
Seien Sie vorsichtig, wenn Sie 32-Bit-Anwendungen (die das 32-Bit-MSIE aufrufen) unter 64-Bit-Windows ausführen, sollte der Registrierungseintrag zu HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ MAIN \ FeatureControl \ FEATURE_BROWSER_EMULATION hinzugefügt werden stattdessen.
Igordc

1
Ich habe HTML über xsl / xslt gerendert und der Regedit hat aus irgendeinem Grund nicht funktioniert ... Das Meta hat den Trick gemacht. Vielen Dank!
MazarD

25

Gott sei Dank habe ich das gefunden. Folgendes ist äußerst wichtig:

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

Ohne dies würde keiner der von mir erstellten Berichte nach der Installation von IE9 funktionieren, obwohl er in IE8 hervorragend funktioniert hat. Sie würden in einem Webbrowser-Steuerelement ordnungsgemäß angezeigt, aber es fehlten Buchstaben, aufgebockte Leerzeichen usw., wenn ich .Print () aufrief. Sie waren nur einfaches HTML, das auch in Mosaic gerendert werden sollte. heh Ich bin mir nicht sicher, warum der IE7-Kompatibilitätsmodus durcheinander geraten ist. Insbesondere könnten Sie .Print () dieselbe Seite 5 Mal drucken und jedes Mal andere Buchstaben vermissen lassen. Es würde sich sogar auf die PDF-Ausgabe übertragen, also ist es definitiv der Browser.


17

Ein Hinweis zu 64-Bit-Windows, der ein paar Leute auszulösen scheint. Wenn Ihre App unter 64-Bit-Windows ausgeführt wird, müssen Sie das DWORD wahrscheinlich stattdessen unter [HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BROWSER_EMULATION] festlegen.


16

Nur um vollständig zu sein ...

Für 32-Bit-Betriebssysteme müssen Sie einen Registrierungseintrag hinzufügen zu:

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

*******ODER*******

Für 64-Bit-Betriebssysteme müssen Sie einen Registrierungseintrag hinzufügen zu:

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

Dieser Eintrag muss ein Eintrag sein DWORD, bei dem der Name der Name Ihrer ausführbaren Datei ist, die das Webbrowser-Steuerelement hostet. dh:

myappname.exe (VERWENDEN SIE "Contoso.exe" NICHT wie auf der MSDN-Webseite ... es ist nur ein Platzhaltername)

Geben Sie dann einen DWORDWert gemäß der folgenden Tabelle ein:

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

Ich habe auf 11001 dezimal oder 0x2AF9 hex --- (IE 11 EMULATION) geändert, da dies nicht der DEFAULT-Wert ist (wenn Sie IE 11 installiert haben - oder welche Version auch immer).

Dieser MSDN-Artikel enthält Hinweise zu mehreren anderen Registrierungsänderungen, die sich auf das Verhalten des Internet Explorer-Webbrowsers auswirken.


1
Der DWORD-Teil ist sehr wichtig. QWORD funktioniert nicht und man kann diesen Fehler leicht machen.
pvieira

Ich würde hinzufügen, dass Sie beim Debuggen unter VS auch einen Eintrag für myappname.vshost.exe hinzufügen sollten. Andererseits vermute ich, dass das einfache Starten der App aus dem Debugger und dann aus dem Debugger ebenfalls den Trick machen würde. Ich denke, es hat einmal für mich funktioniert; aber ich bin nicht 100% sicher.
Papa Schlumpf

1
Aufgrund meiner IE11-Konfiguration musste ich IE11 öffnen und die Ziel-URL zu meinen vertrauenswürdigen Sites hinzufügen. Ohne dies würden die Seitenskripte nicht ausgeführt, obwohl meine Registrierung ordnungsgemäß konfiguriert war.
Tony

15

Ich weiß, dass dieser Thread alt ist und es bereits umfassende Antworten gibt.

Nur für den Fall, dass Sie das nicht wissen:

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

Sie müssen die IE-Versionsnummer nicht als fest codieren

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


Dies hat nichts mit dem Problem zu tun. Das WebBrowser-Steuerelement wird nur im IE7-Modus geladen, sofern es nicht mit einer Registrierungseinstellung für Ihr bestimmtes Programm überschrieben wird.
Christian

4
@Christian Bist du sicher? Soweit ich <meta http-equiv="X-UA-Compatible" content="IE=edge" >das beurteilen kann, wird der webBrowser im neuesten IE-Modus geladen , wenn die Webseite im Header enthalten ist. Warum gibt es mehr als 90 positive Stimmen für Mikels Antwort? weil seine Lösung funktioniert. Das Ändern der Registrierung ist nicht erforderlich, wenn Sie die Webseite ändern können.
Tyler Long

Ich bin zu 100% positiv, aber ich denke, es hängt auch vom Standort der Website ab. Ich habe lokale Inhalte geladen und die Version kann sich nur über die Registrierung bewegen. Vertrauen Sie mir, ich würde die Registrierungslösung für alles andere wegwerfen, was funktioniert, aber nichts anderes schien zu funktionieren.
Christian

dh = Edge hat bei mir funktioniert, ohne dass ich die Registrierung berührt habe. Vielen Dank!
Yisroel M. Olewski

@Christian dies hängt in der Tat mit der Frage zusammen - Lösung funktioniert gut.
MarzSocks

6

Ich stimme der angebotenen Lösung voll und ganz zu, aber ich denke, eine kleine Klarstellung ist wichtig, ich denke, sie könnte notwendig sein.

Für jeden Prozess (lesen Sie auch: vshost.exe, yourWinformApplication.exe.svchost oder den Namen Ihrer application.exe), der ein DWORD mit dem angegebenen Wert hinzufügen muss, belasse ich in meinem Fall 9000 (dezimal) in der Anwendung Name und reibungsloses und fehlerfreies Skript.

Der häufigste Fehler ist zu glauben, dass es notwendig ist, "contoso.exe" wie besehen hinzuzufügen und zu denken, dass alles funktioniert!


3

Ja, das WebBrowser-Steuerelement verwendet die von Ihnen installierte IE-Version. Dies bedeutet natürlich, dass die IE 9-Funktionen, von denen Sie abhängig sind, nicht verfügbar sind, wenn Sie Ihre Anwendung auf einem Computer mit IE 8 ausführen.


2
Lesen Sie meine Antwort noch einmal. Die Ablehnung war unangebracht. Ich sagte, wenn er versucht, IE9-Funktionen zu verwenden, die dann auf einem Computer ohne IE9 bereitgestellt werden, funktionieren diese Funktionen nicht. Ihre Registrierungseinstellung für die Abwärtskompatibilität ändert daran nichts.
Josh

16
Ihr erster Satz ist offensichtlich falsch. Ihr zweiter Satz ist zumindest offensichtlich und faul. Übrigens danke für die Vergeltungsabstimmung. Sehr erwachsen.
Whitehawk

3
Das WebBrowser-Steuerelement verwendet die jeweils installierte IE-Version. Das Erkennungsskript erkennt dies jedoch möglicherweise nicht. Versuchen Sie diese [Website ( whatismybrowser.com/))1] . Ich weiß, dass andere Websites mir die falschen Informationen gegeben haben, aber diese Website hat den Browser korrekt als die Version des IE identifiziert, die auf meinem Computer installiert wurde. [1]: whatismybrowser.com
cjbarth

3

Ich bin zu dieser Lösung gekommen und es hat bei mir nicht funktioniert! Da ich 64bit verwendete, musste ich die Registrierung ersetzen:

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

Anstelle desjenigen, über den alle reden:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]

1

Ich mochte den (C #) Code im Folgenden, der die Registrierungseinstellungen für Ihre App festlegt. Ich bin mir nicht sicher, ob es nach der Installation abgeschnitten wird, wenn Berechtigungen erforderlich sind. Für mich wurde ein Problem behoben, bei dem WebSocket in einem WebBrowser-Steuerelement in WPF nicht verfügbar war.

C # Webbrowser Ajax-Aufruf


1

Ich hatte das gleiche Problem und die Registrierungsantworten hier funktionierten nicht.

Ich hatte ein Browser-Steuerelement in der neuen Version meines Programms, das unter XP einwandfrei funktionierte und unter Windows 7 (64 Bit) fehlschlug. Die alte Version funktionierte sowohl unter XP als auch unter Windows 7.

Die im Browser angezeigte Webseite verwendet ein seltsames Plugin zum Anzeigen alter SVG-Karten (ich denke, es ist ein Java-Applet).

Es stellt sich heraus, dass das Problem mit dem DEP-Schutz in Windows 7 zusammenhängt.

Alte Versionen von dotnet 2 haben das DEP-Pflichtflag in der exe nicht gesetzt, aber ab dotnet 2, SP 1 (yep, das Kompilierungsverhalten und damit das Laufzeitverhalten von exe haben sich je nach dem Computer geändert, auf dem Sie kompiliert haben, nett. ..).

Es ist in einem MSDN-Blog NXCOMPAT und im C # -Compiler dokumentiert . Um es zu zitieren: Dies wird zweifellos einige Entwickler überraschen ... Laden Sie ein Framework Service Pack herunter, kompilieren Sie es neu, führen Sie Ihre App aus, und Sie erhalten jetzt IP_ON_HEAP-Ausnahmen.

Wenn Sie dem Post-Build in Visual Studio Folgendes hinzufügen, wird DEP für die Exe deaktiviert und alles funktioniert wie erwartet:

all "$(DevEnvDir)..\tools\vsvars32.bat"
editbin.exe /NXCOMPAT:NO "$(TargetPath)"

-3

In Bezug auf Whitehawks akzeptierte Antwort. Ich versuche nur, ein bisschen praktische Erfahrung hinzuzufügen. Ich habe nur versucht, einen Kommentar hinzuzufügen, aber SO beschwert sich, dass es zu lang ist.

Grundsätzlich funktioniert der Registrierungsschalter FEATURE_BROWSER_EMULATION ohne installierten IE 9 überhaupt nicht.

Zum Beispiel habe ich heute aus eigener Erfahrung versucht, das .net-Webcontrol mit dem IE10-Modus zum Laufen zu bringen, da ein HTML, das ich rendern möchte, unter VS2012 nicht mit .netControl funktioniert und nicht einmal funktioniert, wenn ich das HTML in IE8 lade Direkt wird CSS immer noch nicht richtig gerendert (auch wenn ich sage, dass blockierte Inhalte zugelassen sind). Aber ich habe das gleiche HTML ok mit IE10 auf der Win 8-Maschine eines Freundes getestet. Aus diesem Grund versuche ich, das .net webControl in den IE 10-Modus zu versetzen, aber es schlägt immer wieder fehl ...

Jetzt dachte ich, dies ist bcos, auf meinem Win 7-Computer ist nur IE8 installiert. Unabhängig davon, welchen Wert ich auf den Schalter FEATURE_BROWSER_EMULATION gesetzt habe (Wert auf IE9, IE10 IE11), funktioniert dies überhaupt nicht!

Dann habe ich IE 10 heruntergeladen und auf meinem Win 7-Computer installiert. Trotzdem wird es nicht funktionieren, dann habe ich FEATURE_BROWSER_EMULATION hinzugefügt, es hat angefangen zu funktionieren!

Außerdem habe ich festgestellt, dass das webControl unabhängig davon, welchen Wert ich festgelegt habe, standardmäßig sogar den Wert 0 verwendet, der immer noch für mich funktioniert.

Zusammenfassend lässt sich sagen, dass Sie ZWEI Dinge tun müssen , wenn Sie IE X installiert haben, aber .Net webControl unter IE (X + N) N> 0 modo funktionieren soll:

  1. Gehen Sie zur MS-Website und laden Sie den IE (X + N) herunter und installieren Sie ihn auf Ihrem Computer. Nach der Installation müssen Sie einen Neustart durchführen.

  2. wende die Antwort von whitehawk an.

Grundsätzlich gilt: Um den Wert dieser Funktion mithilfe der Registrierung zu steuern, fügen Sie der folgenden Einstellung den Namen Ihrer ausführbaren Datei hinzu und stellen Sie den Wert so ein, dass er der gewünschten Einstellung entspricht.

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

Windows Internet Explorer 8 und höher. Die Funktion FEATURE_BROWSER_EMULATION definiert den Standardemulationsmodus für Internet Explorer und unterstützt die folgenden Werte.

Wert Beschreibung

  • 11001 (0x2AF9 Internet Explorer 11. Webseiten werden im IE11-Edge-Modus angezeigt, unabhängig von der Anweisung! DOCTYPE.

    11000 (0x2AF8) IE11. Webseiten mit standardbasierten! DOCTYPE-Anweisungen werden im IE11-Edge-Modus angezeigt. Standardwert für IE11.

    10001 (0x2711) Internet Explorer 10. Webseiten werden unabhängig von der Anweisung! DOCTYPE im IE10-Standardmodus angezeigt.

    10000 (0x02710) Internet Explorer 10. Webseiten mit standardbasierten! DOCTYPE-Anweisungen werden im IE10-Standardmodus angezeigt. Standardwert für Internet Explorer 10.

    9999 (0x270F) Windows Internet Explorer 9. Webseiten werden unabhängig von der Anweisung! DOCTYPE im IE9-Standardmodus angezeigt.

    9000 (0x2328) Internet Explorer 9. Webseiten mit standardbasierten! DOCTYPE-Anweisungen werden im IE9-Modus angezeigt. Standardwert für Internet Explorer 9.

    Wichtig In Internet Explorer 10 werden Webseiten mit standardbasierten! DOCTYPE-Anweisungen im IE10-Standardmodus angezeigt.

    8888 (0x22B8) Webseiten werden im IE8-Standardmodus angezeigt, unabhängig von der Anweisung! DOCTYPE.

    8000 (0x1F40) Webseiten mit standardbasierten! DOCTYPE-Anweisungen werden im IE8-Modus angezeigt. Standardwert für Internet Explorer 8 Wichtig In Internet Explorer 10 werden Webseiten mit standardbasierten! DOCTYPE-Anweisungen im IE10-Standardmodus angezeigt.

    7000 (0x1B58) Webseiten mit standardbasierten! DOCTYPE-Anweisungen werden im IE7-Standardmodus angezeigt. Standardwert für Anwendungen, die das WebBrowser-Steuerelement hosten.

Vollständige Referenz hier


without IE 9 installed, the registry switch EATURE_BROWSER_EMULATION won't work AT ALL.- das ist falsch. Ich habe nur IE8 installiert und kann den Schalter perfekt verwenden, um den Webbrowser in verschiedene Rendering-Modi zu versetzen.
GSerg

Ich habe versucht, IE8 zu installieren, um den IE10-Modus zu erhalten, funktioniert überhaupt nicht! Nur noch einmal versucht, hat nicht funktioniert
Gob00st
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.