Heim > Backend-Entwicklung > C++ > Wie kann ich bei AJAX -Aufrufen die nicht reagierende C# Webbrowser -Steuerung beheben?

Wie kann ich bei AJAX -Aufrufen die nicht reagierende C# Webbrowser -Steuerung beheben?

DDD
Freigeben: 2025-01-30 20:36:09
Original
623 Leute haben es durchsucht

How to Fix Unresponsive C# WebBrowser Control During Ajax Calls?

c# Webbrowser -Steuerung und Ajax Call

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren
umfassendere Funktionseinstellungen

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage