Ich habe Veers Antwort gesehen. Ich denke es ist richtig, aber ich habe nicht für mich gearbeitet. Vielleicht verwende ich .NET 4 und ein 64x-Betriebssystem. Bitte überprüfen Sie dies.
Sie können das Setup einrichten oder es beim Start Ihrer Anwendung überprüfen:
private void Form1_Load(object sender, EventArgs e)
{
var appName = Process.GetCurrentProcess().ProcessName + ".exe";
SetIE8KeyforWebBrowserControl(appName);
}
private void SetIE8KeyforWebBrowserControl(string appName)
{
RegistryKey Regkey = null;
try
{
// For 64 bit machine
if (Environment.Is64BitOperatingSystem)
Regkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\\Wow6432Node\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION", true);
else //For 32 bit machine
Regkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION", true);
// If the path is not correct or
// if the user haven't priviledges to access the registry
if (Regkey == null)
{
MessageBox.Show("Application Settings Failed - Address Not found");
return;
}
string FindAppkey = Convert.ToString(Regkey.GetValue(appName));
// Check if key is already present
if (FindAppkey == "8000")
{
MessageBox.Show("Required Application Settings Present");
Regkey.Close();
return;
}
// If a key is not present add the key, Key value 8000 (decimal)
if (string.IsNullOrEmpty(FindAppkey))
Regkey.SetValue(appName, unchecked((int)0x1F40), RegistryValueKind.DWord);
// Check for the key after adding
FindAppkey = Convert.ToString(Regkey.GetValue(appName));
if (FindAppkey == "8000")
MessageBox.Show("Application Settings Applied Successfully");
else
MessageBox.Show("Application Settings Failed, Ref: " + FindAppkey);
}
catch (Exception ex)
{
MessageBox.Show("Application Settings Failed");
MessageBox.Show(ex.Message);
}
finally
{
// Close the Registry
if (Regkey != null)
Regkey.Close();
}
}
Möglicherweise finden Sie messagebox.show nur zum Testen.
Die Schlüssel lauten wie folgt:
11001 (0x2AF9) - Internet Explorer 11. Webseiten werden unabhängig von der !DOCTYPE
Direktive im IE11-Edge-Modus angezeigt .
11000 (0x2AF8) - Internet Explorer 11. 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 !DOCTYPE
Anweisung im IE10-Standardmodus angezeigt .
10000 (0x2710) - Internet Explorer 10. Webseiten mit standardbasierten
!DOCTYPE
Anweisungen werden im IE10-Standardmodus angezeigt. Standardwert für Internet Explorer 10.
9999 (0x270F) - Internet Explorer 9. Webseiten werden unabhängig von der !DOCTYPE
Anweisung 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 !DOCTYPE
Direktive 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.
Referenz: MSDN: Internet Feature Controls
Ich habe gesehen, dass Anwendungen wie Skype 10001 verwenden. Ich weiß es nicht.
HINWEIS
Die Setup-Anwendung ändert die Registrierung. Möglicherweise müssen Sie der Manifestdatei eine Zeile hinzufügen, um Fehler aufgrund von Berechtigungen zum Ändern der Registrierung zu vermeiden:
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
UPDATE 1
Dies ist eine Klasse, die die neueste Version von IE unter Windows erhält und die erforderlichen Änderungen vornimmt.
public class WebBrowserHelper
{
public static int GetEmbVersion()
{
int ieVer = GetBrowserVersion();
if (ieVer > 9)
return ieVer * 1000 + 1;
if (ieVer > 7)
return ieVer * 1111;
return 7000;
} // End Function GetEmbVersion
public static void FixBrowserVersion()
{
string appName = System.IO.Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetExecutingAssembly().Location);
FixBrowserVersion(appName);
}
public static void FixBrowserVersion(string appName)
{
FixBrowserVersion(appName, GetEmbVersion());
} // End Sub FixBrowserVersion
// FixBrowserVersion("<YourAppName>", 9000);
public static void FixBrowserVersion(string appName, int ieVer)
{
FixBrowserVersion_Internal("HKEY_LOCAL_MACHINE", appName + ".exe", ieVer);
FixBrowserVersion_Internal("HKEY_CURRENT_USER", appName + ".exe", ieVer);
FixBrowserVersion_Internal("HKEY_LOCAL_MACHINE", appName + ".vshost.exe", ieVer);
FixBrowserVersion_Internal("HKEY_CURRENT_USER", appName + ".vshost.exe", ieVer);
} // End Sub FixBrowserVersion
private static void FixBrowserVersion_Internal(string root, string appName, int ieVer)
{
try
{
//For 64 bit Machine
if (Environment.Is64BitOperatingSystem)
Microsoft.Win32.Registry.SetValue(root + @"\Software\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", appName, ieVer);
else //For 32 bit Machine
Microsoft.Win32.Registry.SetValue(root + @"\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", appName, ieVer);
}
catch (Exception)
{
// some config will hit access rights exceptions
// this is why we try with both LOCAL_MACHINE and CURRENT_USER
}
} // End Sub FixBrowserVersion_Internal
public static int GetBrowserVersion()
{
// string strKeyPath = @"HKLM\SOFTWARE\Microsoft\Internet Explorer";
string strKeyPath = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer";
string[] ls = new string[] { "svcVersion", "svcUpdateVersion", "Version", "W2kVersion" };
int maxVer = 0;
for (int i = 0; i < ls.Length; ++i)
{
object objVal = Microsoft.Win32.Registry.GetValue(strKeyPath, ls[i], "0");
string strVal = System.Convert.ToString(objVal);
if (strVal != null)
{
int iPos = strVal.IndexOf('.');
if (iPos > 0)
strVal = strVal.Substring(0, iPos);
int res = 0;
if (int.TryParse(strVal, out res))
maxVer = Math.Max(maxVer, res);
} // End if (strVal != null)
} // Next i
return maxVer;
} // End Function GetBrowserVersion
}
Verwendung der Klasse wie folgt
WebBrowserHelper.FixBrowserVersion();
WebBrowserHelper.FixBrowserVersion("SomeAppName");
WebBrowserHelper.FixBrowserVersion("SomeAppName",intIeVer);
Möglicherweise haben Sie ein Problem mit der Vergleichbarkeit von Windows 10, möglicherweise müssen Sie aufgrund Ihrer Website selbst dieses Meta-Tag hinzufügen
<meta http-equiv="X-UA-Compatible" content="IE=11" >
Genießen :)
Environment.Is64BitOperatingSystem
zuEnvironment.Is64BitProcess
.Wow6432Node
Unterschlüssel umleitet . Ihre Anwendung muss nichts extra tun, um sich an diesen "neuen" Schlüssel anzupassen.Verwenden der Werte von MSDN :
quelle
CreateSubKey
dieser verwendet werden sollte,OpenSubKey
da OpenSubKey null zurückgibt, wenn der Schlüssel nicht existiert.Nach dem, was ich hier gelesen habe ( Steuern der WebBrowser-Steuerungskompatibilität :
Am einfachsten ist es, eine sehr hohe Dezimalzahl einzugeben ...
quelle
SOFTWARE\WOW6432Node\Microsoft...
. Es wird automatisch im Code umgeleitet, kann Sie jedoch überraschen, wenn Sie regedit öffnen.Registry.LocalMachine.OpenSubKey("..
arbeitete auf Win2012 Server als Admin.Sie können diesen Link versuchen
quelle
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer
aber dieser Weg ist einfacher. dankeProcesses.getCurrentProcessName()
? Kann seinProcess.GetCurrentProcess().ProcessName
?Anstatt den RegKey zu ändern, konnte ich eine Zeile in die Kopfzeile meines HTML-Codes einfügen:
Siehe Webbrowser-Steuerung und Angeben der IE-Version .
quelle
FEATURE_BROWSER_EMULATION
Technik bekomme ich,Mozilla/5.0 (Windows NT 6.2; Win64; x64; ...
während ich mit derX-UA-Compatible
Technik bekommeMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; ...
, die Google Analytics als Handy erkennt.Hier die Methode, die ich normalerweise verwende und die für mich funktioniert (sowohl für 32-Bit- als auch für 64-Bit-Anwendungen; dh_emulation kann jeder sein, der hier dokumentiert ist: Internet Feature Controls (B..C), Browser-Emulation ):
quelle
Ich konnte Lucas Lösung implementieren, musste aber einige Änderungen vornehmen, damit sie funktioniert. Mein Ziel war es, D3.js mit einem Webbrowser-Steuerelement für eine Windows Forms-Anwendung (für .NET 2.0) zu verwenden. Es funktioniert jetzt für mich. Ich hoffe das kann jemand anderem helfen.
Außerdem habe ich den Projekteinstellungen eine Zeichenfolge (ie_emulation) mit dem Wert 11999 hinzugefügt. Dieser Wert scheint für IE11 (11.0.15) zu funktionieren.
Als nächstes musste ich die Berechtigung für meine Anwendung ändern, um den Zugriff auf die Registrierung zu ermöglichen. Dies kann durch Hinzufügen eines neuen Elements zu Ihrem Projekt erfolgen (mithilfe von VS2012). Wählen Sie unter Allgemeine Elemente die Option Anwendungsmanifestdatei aus. Ändern Sie die Ebene von asInvoker in requireAdministrator (wie unten gezeigt).
Wenn jemand, der dies liest, versucht, D3.js mit einem Webbrowser-Steuerelement zu verwenden, müssen Sie möglicherweise die JSON-Daten ändern, die in einer Variablen auf Ihrer HTML-Seite gespeichert werden sollen, da D3.json XmlHttpRequest verwendet (einfacher mit einem Webserver zu verwenden). Nach diesen und den oben genannten Änderungen können meine Windows-Formulare lokale HTML-Dateien laden, die D3 aufrufen.
quelle
Kombinieren Sie die Antworten von RooiWillie und MohD
und denken Sie daran, Ihre App mit Administratorrechten auszuführen.
quelle
Wenn Sie nur Folgendes zu Ihrem HTML-Code hinzufügen, sind keine Registrierungseinstellungen erforderlich
quelle
Visual Basic-Version:
quelle
Ich weiß, dass dies gepostet wurde, aber hier ist eine aktuelle Version für dotnet 4.5, die ich oben verwende. Ich empfehle, die Standard-Browser-Emulation zu verwenden, die den Doctype berücksichtigt
InternetExplorerFeatureControl.Instance.BrowserEmulation = DocumentMode.DefaultRespectDocType;
quelle
code
InternetExplorerFeatureControl.Instance.BrowserEmulation = DocumentMode.DefaultRespectDocType; ' Zum besseren Verständnis, wo dies gezogen wurde, können Sie auf msdn.microsoft.com/en-us/ie/…Eine kostengünstige und einfache Problemumgehung besteht darin, dass Sie einfach einen Wert, der größer als 11001 ist, in den Schlüssel FEATURE_BROWSER_EMULATION eingeben können. Dann wird der neueste IE benötigt, der im System verfügbar ist.
quelle
Es ist am besten, den höchstmöglichen Modus zu erzwingen. Dies kann erreicht werden, indem hinzugefügt wird:
und es ist immer gut, die Polyfill-Bibliothek einzuschließen, um IE zu unterstützen:
vor jedem Skript.
quelle