Une page Web ne parvient pas à trouver le focus dans Internet Explorer 9

Cet article fournit des informations sur la résolution des problèmes de page Web qui ne peuvent pas être activés dans Internet Explorer 9.

Version du produit d’origine :   Internet Explorer 9
Numéro de la base de connaissances initiale :   2600156

Symptômes

Une page Web ou un contrôle ActiveX hébergé dans une page Web peut cesser de recevoir le focus de manière intermittente lors de l’affichage à l’aide d’Internet Explorer 9. Les contrôles peuvent apparaître désactivés, ou le focus peut se terminer dans la barre d’adresses lorsqu’un utilisateur clique sur la page pour essayer d’obtenir le focus. Ce problème peut affecter n’importe quel élément d’interface utilisateur de la page qui peut recevoir le focus.

Cause

Le problème se produit car la fenêtre d’onglet est détachée de la file d’attente d’entrée de la fenêtre frame. Microsoft a confirmé qu’il s’agit d’un problème lié à l’utilisation de la fonctionnalité de résistance de blocage dans Internet Explorer 9.

Résolution

Le correctif de ce problème est disponible dans la mise à jour cumulative d’Internet Explorer MS11-099 (KB 2618444) ou toute mise à jour cumulative Internet Explorer.

Il existe plusieurs façons de contourner ce problème :

  1. Évitez d’effectuer des appels de blocage de longue durée ou d’exécuter tout travail synchrone sur un thread d’interface utilisateur susceptible d’interférer avec la pompe de messages du thread.

  2. Créez la valeur de clé de Registre suivante pour désactiver la fonctionnalité de résistance de blocage :

    HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\
    Type: REG_DWORD
    Name: HangRecovery
    Value: 0
    

    La fonctionnalité de résistance des blocages est activée par défaut dans Internet Explorer 9. Définition de la HangRecovery valeur pour 0 désactiver cette fonctionnalité ; définissez-la pour l' 1 activer.

  3. Évitez d’appeler AttachThreadInput ou d’autres API susceptibles de modifier le propriétaire de la fenêtre d’onglet, étant donné que ces API affectent la file d’attente d’entrée du thread d’onglet. SetWindowLong est un exemple d’API qui peut finir par modifier la file d’attente d’entrée du thread d’onglet.