É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 siwindow.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é).