es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo acceder a un iframe dentro de un iframe con restricciones de seguridad.

Dentro de un iframe en modo de prueba con sandbox="allow-scripts", si creo dinámicamente un nuevo iframe usando JS, no puedo acceder a él y recibo el siguiente error:
DOMException: Se bloqueó un frame con el origen "null" al acceder a un frame de origen cruzado.

var iframe = document.createElement('iframe');
document.body.appendChild(iframe);

El código iframe.contentWindow.document.open(); lanza un error.

¿Por qué se considera como origen cruzado el iframe recién generado? ¿Y cómo puedo crear un iframe al que pueda acceder?
No puedo cambiar las propiedades de seguridad del iframe exterior.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El nuevo iframe generado se considera de origen cruzado porque no se crea dentro del mismo origen que el iframe principal. El atributo de sandbox allow-scripts solo permite que se ejecuten scripts dentro del mismo origen.

    Para crear un iframe al que se pueda acceder, puedes usar el atributo de sandbox sandbox nuevamente con el valor allow-same-origin allow-scripts. Esto creará un nuevo iframe al que se puede acceder desde dentro del iframe en sandbox. Ten en cuenta que esto solo funcionará si el iframe principal tiene allow-same-origin en su atributo sandbox.

    var iframe = document.createElement('iframe');
    iframe.setAttribute('sandbox', 'allow-same-origin allow-scripts');
    document.body.appendChild(iframe);
    
    iframe.contentWindow.document.open(); // ahora no debería lanzar un error
    

    Si no puedes cambiar las propiedades de sandbox del iframe externo, es posible que no haya forma de crear un iframe al que se pueda acceder desde dentro del iframe en sandbox.

Comments are closed.