Evite usar window.top

Categoría: compatibilidad, listo para actualización, migración en línea

Potencial de impacto: alto

Síntomas

  • El siguiente error de script se mostrará a los usuarios o se incluirá en los registros de errores: Error: Blocked a frame with origin "https://<yourinstance>.dynamics.com" from accessing a cross-origin frame.

  • Es posible que las personalizaciones no se comporten correctamente en el contexto de Dynamics 365 App for Outlook, Dynamics 365 para teléfonos y tabletas, o una aplicación externa que hospeda Microsoft Dataverse en un Iframe.

    Nota

    Es posible que haya diversas situaciones donde la administración del error lo enmascara y sigue el procesamiento de script, por lo que produce un comportamiento inesperado.

Instrucciones

Evite usar window.top en los scripts que se ejecuten en el contexto de Dynamics 365 App for Outlook, Dynamics 365 for phones y tablets o en una aplicación externa que hospede Dataverse en un IFrame. Aunque estos escenarios no se den actualmente en su organización, debe evitar usar window.top o protegerse frente a este problema.

Importante

El uso de window.parent o variaciones de la jerarquía principal (por ejemplo,window.parent.parent) puede producir los mismos síntomas.

A continuación se describen los métodos recomendados:

  • Evitar el uso del objeto window.top en conjunto.

  • Si usar window.top es la única opción disponible, primero pruébelo para determinar si se puede acceder a window.top mediante el script a continuación. Si no está disponible, proporcione una lógica alternativa o una experiencia de usuario de reserva.

    Nota

    Aunque se recomienda evitar usar window.top, este script se incluye en aquellos casos extremos donde puede ser que es la única opción disponible.

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

Patrones problemáticos

Se debe evitar cualquier uso de window.top, si es posible. Los siguientes son ejemplos de patrones que se ven habitualmente.

Advertencia

Estos escenarios deben evitarse.

// 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");

Información adicional

En los escenarios mencionados, window.top se refiere a la ventana propiedad de un contexto de aplicaciones externo a Dynamics 365. Debido a los distintos orígenes, el explorador presenta al usuario con un error de seguridad de origen cruzado.

Vea también

Aplicar la lógica de negocios usando scripting de cliente en aplicaciones basadas en modelos que usan JavaScript
Eventos en formularios y cuadrículas en aplicaciones basadas en modelos

Nota

¿Puede indicarnos sus preferencias de idioma de documentación? Realice una breve encuesta. (tenga en cuenta que esta encuesta está en inglés)

La encuesta durará unos siete minutos. No se recopilan datos personales (declaración de privacidad).