webentwicklung-frage-antwort-db.com.de

Wie deaktiviere ich die Kompatibilitätsansicht für das IE WebBrowserControl in einer WinForms-App?

Wenn ich in meiner WinForms-App ein WebBrowser-Steuerelement verwende, wird es anscheinend in den Kompatibilitätsmodus versetzt. Wie kann ich dies deaktivieren und dafür sorgen, dass es sich genauso verhält wie das eigenständige IE auf meinem Computer, wenn ich auf derselben Site surfe?

  • Ich möchte keine Registrierungsänderungen vornehmen. Ich möchte, dass alles in meiner App enthalten ist.
  • Die Website, die ich lade, gehört nicht mir, daher kann ich keine Änderungen daran vornehmen (es sei denn, diese können programmgesteuert in meiner App vorgenommen werden).
33
Danny Tuppeny

Es gibt keine andere Möglichkeit, als die folgenden Registrierungseinstellungen zu konfigurieren:

 HKLM\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION 

oder wenn es sich um eine 32-Bit-App unter 64-Bit-Windows handelt:

 HKLM\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION` 

Diese Einstellungen werden im Steuerelement WebBrowser nicht angezeigt.

Weitere Informationen finden Sie unter:

Welchen IE Kompatibilitätsmodus verwendet das Webbrowser-Steuerelement?

Falls der Link stirbt:

Sie erstellen einen DWORD -Wert, der dem Namen Ihrer ausführbaren Datei entspricht, und legen diesen Wert auf einen der folgenden Werte fest:

7000: Seiten mit standardbasiertem <!DOCTYPE> Direktiven werden im IE7-Modus angezeigt.
8000: Seiten mit standardbasiertem <!DOCTYPE> Direktiven werden im IE8-Modus angezeigt
8888: Seiten werden immer im IE8-Modus angezeigt, unabhängig vom <!DOCTYPE> Richtlinie. (Dies umgeht die oben aufgeführten Ausnahmen.)
9000: IE9-Einstellungen verwenden!
9999: IE9 erzwingen

Beispielsweise:

enter image description here

Aus meinen eigenen Experimenten mit IE9:

  • 9000 - erbt den Kompatibilitätsmodus, der in der Einstellung für den globalen Kompatibilitätsmodus von IE9 festgelegt wurde. d. h .: enter image description here

  • 9999 - Deaktiviert den Kompatibilitätsmodus für IE9 in der Host-Anwendung, unabhängig von der global konfigurierten Einstellung für den Kompatibilitätsmodus

Ihre Anwendung müsste wahrscheinlich ermitteln, welche zugrunde liegende IE Version verfügbar ist, um zu bestimmen, welcher Wert verwendet werden soll:

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Version 

oder wenn es sich um eine 32-Bit-App unter 64-Bit-Windows handelt:

 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Version 

Es gibt auch diesen älteren Artikel aus der Zeit als IE8 herauskam, der einen Blick wert ist:

Weitere Verbesserungen der IE8-Erweiterbarkeit

Sie können diese Einstellungen auch auf Benutzerbasis konfigurieren unter:

 HKCU\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION 
55
Kev

Obwohl es nicht das ist, wonach Sie gefragt haben, können Sie, wenn Sie die Site besitzen, Folgendes in den head-Abschnitt des HTML-Codes einfügen:

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

Siehe: http://msdn.Microsoft.com/en-us/library/cc288325 (v = vs.85) .aspx

Hier ist der Kern des Problems: Wenn ein Benutzer die Kompatibilitätsansicht in IE8 aktiviert, werden alle Seitenanweisungen außer Kraft gesetzt . Daher kann jede Seite oder Servervariable, die Sie verwenden möchten, nicht verhindern, dass IE) in die Kompatibilitätsansicht wechselt, wenn der Benutzer diese Funktion in IE aktiviert hat. Die meisten Leute glauben, Seitenanweisungen oder eine Art Geheimnis Header-Server-Variable wird die Site reparieren. Nein. Keine dieser Lösungen funktioniert, wenn die Einstellung manuell überschrieben wurde. Ich weiß, es ist einfach nicht cool. Also funktioniert das Folgende nur, wenn der Benutzer hat die Kompatibilitätsansicht nicht aktiviert.

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

Bearbeiten Sie den Schlüssel, um die Schritte zum Ändern in der Registrierung zu verdeutlichen:

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

Fügen Sie dann ein neues DWORD mit dem Namen iexplore.exe hinzu. Klicken Sie dazu mit der rechten Maustaste auf den Schlüssel und wählen Sie Neu> DWORD. Geben Sie diesem DWORD den Dezimalwert 9999 . Dadurch werden alle Websites ohne Kompatibilitätsansicht gerendert. Um die Kompatibilitätsansicht wieder zu aktivieren, löschen Sie dieses DWORD. Wenn Sie diese Änderung automatisieren und ein Batch-Skript auf Ihrem System ausführen möchten, lesen Sie Michal Ms Skript.

https://Gist.github.com/michal-m/1853315

5
mbokil

Ich weiß, dass dies eine alte Frage ist, aber es gibt eine Möglichkeit, einen Header in das Webbrowser-Steuerelement in Visual Basic 2010 und höher einzufügen, um die Kompatibilitätsansicht zu deaktivieren:

Das erste, was Sie tun müssen, ist, die aktuelle Webseite abzufangen und das Head-Tag wie folgt zu ersetzen:

Sub compatible()
' --- simple routine to disable compatible view.

    Dim the_url As String
    Dim message As String
    Dim theReplacement As String
    Dim oldMessage As String

    the_url = WebBrowser1.Url.OriginalString

    WebBrowser1.Navigate(the_url)

    message = "<head>" + Chr(13) + Chr(10) + "<meta http-equiv=" + Chr(34) + "X-UA-Compatible" + Chr(34) + "content=" + Chr(34) + "IE=Edge" + Chr(34) + " />" + Chr(13) + Chr(10) + "<base href=" + Chr(34) + the_url + Chr(34) + ">"

    oldMessage = WebBrowser1.DocumentText.ToString()

    theReplacement = Replace(oldMessage, "<head>", message)
    WebBrowser1.DocumentText = theReplacement

End Sub

Dieser Code fügt die beiden folgenden Zeilen im Webbrowser-Steuerelement hinzu:

<meta http-equiv="X-UA-Compatible"content="IE=Edge" />
<base href="(url of the web page)">
2
Cynthia Fridsma