Maison > développement back-end > C++ > Pourquoi mon contrôle C # WebBrowser est-il accroché aux appels AJAX, et comment puis-je le réparer?

Pourquoi mon contrôle C # WebBrowser est-il accroché aux appels AJAX, et comment puis-je le réparer?

Linda Hamilton
Libérer: 2025-01-30 20:33:13
original
848 Les gens l'ont consulté

Why is my C# WebBrowser Control Hanging on AJAX Calls, and How Can I Fix It?

Dépannage des problèmes AJAX dans le contrôle WebBrowser de C #

Le contrôle C # WebBrowser se débat parfois avec les appels Ajax, conduisant à une suspension frustrante "votre demande est traitée". Ce comportement diffère considérablement d'un navigateur IE complet, qui gère généralement ces appels sans problème.

La solution réside souvent dans la configuration du contrôle des fonctionnalités pour mieux aligner le comportement du contrôle WebBrowser avec celui d'une instance IE standard. Surtout, la définition de la fonction "FEATURE_BROWSER_EMULATION" assure une meilleure compatibilité des scripts.

Voici une fonction pour modifier les paramètres de registre:

<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>
Copier après la connexion

Cette fonction est utilisée dans SetBrowserFeatureControl():

<code class="language-csharp">private void SetBrowserFeatureControl()
{
    // Avoid modifying settings in the Visual Studio debugger
    var fileName = System.IO.Path.GetFileName(Process.GetCurrentProcess().MainModule.FileName);
    if (String.Compare(fileName, "devenv.exe", true) == 0 || String.Compare(fileName, "XDesProc.exe", true) == 0) 
        return;

    // Register necessary features (see detailed explanation below for a comprehensive list)
    // ...
}</code>
Copier après la connexion

Pour vous assurer que ces modifications sont appliquées avant l'initialisation du contrôle WebBrowser, appelez SetBrowserFeatureControl() dans le constructeur de votre formulaire principal:

<code class="language-csharp">public MainWindow()
{
    SetBrowserFeatureControl();
    InitializeComponent();
    //...
}</code>
Copier après la connexion

Pour une liste complète des paramètres de contrôle des fonctionnalités recommandés pour résoudre divers problèmes de compatibilité, reportez-vous à cette ressource: Paramètres de clé de contrôle des fonctionnalités du navigateur Cela fournira une solution plus robuste aux problèmes suspendus liés à l'Ajax dans le WebBrowser Contrôle.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal