Problem: Ihre C# WPF -Anwendung (.NET 4) Verwenden einer WebBrowser
-Kontrolle kann im Vergleich zu einem vollständigen Internet Explorer (dh) -browser aufrufen. Dies manifestiert sich oft als anhaltende "Ihre Anfrage wird verarbeitet" ohne Abschluss.
Ursache Ursache: Die Rendering -Engine der Steuerung WebBrowser
spiegelt das Verhalten des IE nicht immer perfekt wider. Diese Inkompatibilität kann die JavaScript- und AJAX -Funktionalität beeinflussen.
Lösung: Feature Control über Registrierungsmanipulation
Der Schlüssel zur Auflösung dieser Anpassung des Emulationsmodus des WebBrowser
-Kontrollregelung mithilfe der Funktionssteuerung. Dies beinhaltet die Änderung der Registrierungseinstellungen, um das Verhalten der Steuerung genauer mit einer bestimmten IE -Version auszurichten. Der folgende Code vermeidet, dass Administrator -Berechtigungen erforderlich sind, indem es auf die Registrierung des aktuellen Benutzers abzielt.
Code Beispiel:
Dieser Code -Snippet legt den Registrierungsschlüssel FEATURE_BROWSER_EMULATION
so ein, dass eine erkannte IE -Version entspricht. Es zeigt auch eine Funktion zum Abrufen des entsprechenden Emulationsmodus basierend auf der installierten IE -Version. Denken Sie daran, die erforderlichen using
-Anweisungen für Microsoft.Win32
und System
zu addieren.
<code class="language-csharp">private void SetBrowserFeatureControlKey(string feature, string appName, uint value) { using (var key = Registry.CurrentUser.CreateSubKey( $@"Software\Microsoft\Internet Explorer\Main\FeatureControl\{feature}", RegistryKeyPermissionCheck.ReadWriteSubTree)) { key.SetValue(appName, (uint)value, RegistryValueKind.DWord); } } private uint GetBrowserEmulationMode() { uint mode = 11000; // Default to IE11 emulation try { using (var ieKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Internet Explorer")) { var version = ieKey?.GetValue("svcVersion") ?? ieKey?.GetValue("Version"); if (version != null) { if (int.TryParse(version.ToString().Split('.')[0], out int browserVersion)) { switch (browserVersion) { case 7: mode = 7000; break; case 8: mode = 8000; break; case 9: mode = 9000; break; case 10: mode = 10000; break; } } } } } catch { /* Ignore registry access errors */ } return mode; } private void SetBrowserFeatureControl() { uint mode = GetBrowserEmulationMode(); SetBrowserFeatureControlKey("FEATURE_BROWSER_EMULATION", Application.ProductName, mode); } // Call SetBrowserFeatureControl() before initializing the WebBrowser control. For example: public MainWindow() { SetBrowserFeatureControl(); InitializeComponent(); }</code>
Wichtige Überlegungen:
GetBrowserEmulationMode
-Funktion enthält eine grundlegende Fehlerbehandlung, um potenzielle Probleme mit dem Registrierungszugriff zu verwalten. Application.ProductName
-Sache wird verwendet, um Ihre Anwendung in der Registrierung zu identifizieren. Möglicherweise müssen Sie dies anpassen, wenn sich der Name Ihrer Anwendung unterscheidet. FEATURE_BROWSER_EMULATION
entscheidend ist, können andere Merkmalsteuerungen je nach den spezifischen AJAX -Problemen erforderlich sein. Wenden Sie sich an die Dokumentation von Microsoft für eine umfassende Liste. Durch die Implementierung dieser Lösung sollten Sie eine größere Konsistenz zwischen Ihrer WebBrowser
-Kontrolle und dem vollständigen IE erreichen, um die Ajax -Probleme zu lösen. Denken Sie daran, nach der Umsetzung dieser Änderungen gründlich zu testen.
Das obige ist der detaillierte Inhalt vonWarum unterscheiden sich die Ajax -Anrufe von C# Webbrowser Control vom Internet Explorer und wie kann ich ihn beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!