Problembeschreibung
Wenn Sie eine Webbrowser -Steuerung in C# WPF .NET 4 -Anwendungen verwenden, klicken Sie auf die Schaltfläche, um ohne Antwort zu antworten. Die Seite zeigt die Meldung "Ihre Anfrage wird verarbeitet" angezeigt, um zu verhindern, dass die Seite weiter verarbeitet wird. Dieses Problem tritt nicht mit dem vollständigen IE -Browser auf.
Problemanalyse
WPF- und WinForms -Webbrowser -Steuerelemente unterscheiden sich erheblich vom vollständigen IE -Browser im Verhalten. Diese Unterschiede können Probleme mit der Skriptkompatibilität verursachen. Lösung
Das Verhalten der Webbrowser -Steuerung stimmt mit dem IE -Browser durch die Implementierung der Funktionskontrolle überein. Dies beinhaltet das Festlegen spezifischer Funktionen, wie z. B. feature_browser_emortion, die ohne Administratorberechtigungen implementiert werden können.
Code Beispiel
wie man das Beispiel
verwendet
Bereitstellung<code class="language-csharp">private void SetBrowserFeatureControlKey(string feature, string appName, uint value) { using (var key = Registry.CurrentUser.CreateSubKey( String.Concat(@"Software\Microsoft\Internet Explorer\Main\FeatureControl\", feature), RegistryKeyPermissionCheck.ReadWriteSubTree)) { key.SetValue(appName, (UInt32)value, RegistryValueKind.DWord); } }</code>
Um sicherzustellen, dass diese Änderung effektiv ist, sollten die erforderlichen Funktionen vor der Webbrowser -Initialisierung registriert werden, normalerweise im Konstruktor des Hauptfensters.
<code class="language-csharp">private void SetBrowserFeatureControl() { // 获取进程特定设置 var fileName = System.IO.Path.GetFileName(Process.GetCurrentProcess().MainModule.FileName); // 确保控件不在Visual Studio设计器中运行 if (String.Compare(fileName, "devenv.exe", true) == 0 || String.Compare(fileName, "XDesProc.exe", true) == 0) return; SetBrowserFeatureControlKey("FEATURE_BROWSER_EMULATION", fileName, GetBrowserEmulationMode()); // IE10 标准模式,适用于具有基于标准的 !DOCTYPE 指令的页面。 SetBrowserFeatureControlKey("FEATURE_AJAX_CONNECTIONEVENTS", fileName, 1); SetBrowserFeatureControlKey("FEATURE_ENABLE_CLIPCHILDREN_OPTIMIZATION", fileName, 1); SetBrowserFeatureControlKey("FEATURE_MANAGE_SCRIPT_CIRCULAR_REFS", fileName, 1); SetBrowserFeatureControlKey("FEATURE_DOMSTORAGE", fileName, 1); SetBrowserFeatureControlKey("FEATURE_GPU_RENDERING", fileName, 1); SetBrowserFeatureControlKey("FEATURE_IVIEWOBJECTDRAW_DMLT9_WITH_GDI", fileName, 0); SetBrowserFeatureControlKey("FEATURE_DISABLE_LEGACY_COMPRESSION", fileName, 1); SetBrowserFeatureControlKey("FEATURE_LOCALMACHINE_LOCKDOWN", fileName, 0); SetBrowserFeatureControlKey("FEATURE_BLOCK_LMZ_OBJECT", fileName, 0); SetBrowserFeatureControlKey("FEATURE_BLOCK_LMZ_SCRIPT", fileName, 0); SetBrowserFeatureControlKey("FEATURE_DISABLE_NAVIGATION_SOUNDS", fileName, 1); SetBrowserFeatureControlKey("FEATURE_SCRIPTURL_MITIGATION", fileName, 1); SetBrowserFeatureControlKey("FEATURE_SPELLCHECKING", fileName, 0); SetBrowserFeatureControlKey("FEATURE_STATUS_BAR_THROTTLING", fileName, 1); SetBrowserFeatureControlKey("FEATURE_TABBED_BROWSING", fileName, 1); SetBrowserFeatureControlKey("FEATURE_VALIDATE_NAVIGATE_URL", fileName, 1); SetBrowserFeatureControlKey("FEATURE_WEBOC_DOCUMENT_ZOOM", fileName, 1); SetBrowserFeatureControlKey("FEATURE_WEBOC_POPUPMANAGEMENT", fileName, 0); SetBrowserFeatureControlKey("FEATURE_WEBOC_MOVESIZECHILD", fileName, 1); SetBrowserFeatureControlKey("FEATURE_ADDON_MANAGEMENT", fileName, 0); SetBrowserFeatureControlKey("FEATURE_WEBSOCKET", fileName, 1); SetBrowserFeatureControlKey("FEATURE_WINDOW_RESTRICTIONS", fileName, 0); SetBrowserFeatureControlKey("FEATURE_XMLHTTP", fileName, 1); } private UInt32 GetBrowserEmulationMode() { int browserVersion = 7; using (var ieKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Internet Explorer", RegistryKeyPermissionCheck.ReadSubTree, System.Security.AccessControl.RegistryRights.QueryValues)) { var version = ieKey.GetValue("svcVersion"); if (null == version) { version = ieKey.GetValue("Version"); if (null == version) throw new ApplicationException("需要安装Microsoft Internet Explorer!"); } int.TryParse(version.ToString().Split('.')[0], out browserVersion); } UInt32 mode = 11000; // IE11 标准模式 switch (browserVersion) { case 7: mode = 7000; // IE7 标准模式 break; case 8: mode = 8000; // IE8 模式 break; case 9: mode = 9000; // IE9 模式 break; case 10: mode = 10000; // IE10 模式 break; default: // 默认使用 IE11 模式 break; } return mode; }</code>
Weitere umfassendere Funktionen finden Sie in der im entsprechenden Link bereitgestellten Aktualisierungsantwort.
Diese Revisions -Ausgabe verwaltet das Originalbild und verwendet die natürliche Sprache, während der Inhalt zusammengeführt wird
Das obige ist der detaillierte Inhalt vonWie kann ich bei AJAX -Aufrufen die nicht reagierende C# Webbrowser -Steuerung beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!