Évitez d’utiliser window.top

Catégorie : Capacité de prise en charge, vérification de la disponibilité, migration en ligne

Potentiel d’impact : Élevé

Symptômes

  • L’erreur de script suivante s’affichée aux utilisateurs ou est incluse dans les journaux d’erreurs : Error: Blocked a frame with origin "https://<yourinstance>.dynamics.com" from accessing a cross-origin frame.

  • Les personnalisations peuvent ne pas se comporter correctement dans le contexte de Dynamics 365 App for Outlook, Dynamics 365 pour téléphones et tablettes, ou une application externe qui héberge Microsoft Dataverse dans un IFrame.

    Notes

    Il existe toutefois des scénarios où le traitement des erreurs masque l’erreur et continue le traitement du script, entraînant un comportement inattendu.

Recommandation

Évitez d’utiliser window.top dans les scripts s’exécutant dans le contexte de Dynamics 365 App for Outlook, Dynamics 365 pour téléphones et tablettes, ou une application externe qui héberge Dataverse dans un IFrame. Même si ces scénarios ne s’appliquent pas actuellement à votre organisation, vous devez éviter d’utiliser window.top ou vous protéger contre ce problème.

Important

L’utilisation de window.parent ou les variantes de la hiérarchie parente (par exemple,window.parent.parent) peut entraîner les mêmes symptômes.

Voici les méthodes recommandées :

  • Évitez l’utilisation de l’objet window.top complètement.

  • Si l’utilisation de window.top est la seule option disponible, déterminez d’abord si window.top est accessible en utilisant le script ci-dessous. S’il n’est pas disponible, fournissez une autre logique ou une expérience utilisateur de secours.

    Notes

    Même s’il est recommandé d’évitez d’utiliser window.top, ce script est inclus pour les incidents périphériques où il peut être la seule option disponible.

    function isTopAccessible() {
        try {
                window.top.location;
                return true;
            }
            catch (err) {
                return false;
            }
    }
    
    var canAccess = isTopAccessible();
    alert(canAccess);
    

Schémas problématiques

Toute utilisation de window.top doit être évitée, lorsque cela est possible. Les exemples suivantes proposent des schémas rencontrés couramment.

Avertissement

Ces scénarios doivent être évités.

// Getting or setting variables at the top level
var myValue = window.top.myGlobalVariable;

// Attempting to access the Xrm namespace at the top level
myValue = window.top.Xrm.Page.getAttribute("column1");

Informations supplémentaires

Dans les scénarios mentionnés, window.top fait référence à la fenêtre appartenant à un contexte d’application externe à Dynamics 365. En raison d’origines différentes, le navigateur affiche l’utilisateur avec une erreur de sécurité cross-origin.

Voir aussi

Appliquer la logique métier en utilisant le script client dans les applications basées sur un modèle avec Javascript
Événements dans les formulaires et les grilles des applications basées sur un modèle

Notes

Pouvez-vous nous indiquer vos préférences de langue pour la documentation ? Répondez à un court questionnaire. (veuillez noter que ce questionnaire est en anglais)

Le questionnaire vous prendra environ sept minutes. Aucune donnée personnelle n’est collectée (déclaration de confidentialité).