Tengo el siguiente código en la página example1.com :
<iframe src='//example2.com/embed.html' sandbox="allow-same-origin allow-modals allow-scripts allow-top-navigation allow-top-navigation-by-user-activation"> Y tengo el siguiente código en mi embed.html
<script> try { document.write('top url: ' + top.location.href) } catch (e) { document.write('error' + e); } </script>me sale el error:
SecurityError: Blocked a frame with origin "https://example2.com" from accessing a cross-origin frame. Solo quiero obtener las propiedades del objeto top y uso la etiqueta allow-same-origin en mi código iframe. ¿Esta etiqueta no me permite ejecutar el iframe como el mismo origen? Si no, ¿por qué tenemos esa etiqueta?
example1.com y example2.com son dominios diferentes, por lo tanto, tiene un problema con CORS (intercambio de recursos de origen cruzado), pero no con la política de seguridad de contenido. CORS permite el acceso directo entre los mismos dominios o dominio y su subdominio únicamente.
No puede obtener la propiedad top.location.href dentro del iframe de origen cruzado, pero puede configurarlo: top.location.href = 'https://any_domain.com/path.html' si allow-top-navigation presenta en sandox atributo o si sandbox está ausente.
El atributo sandbox no puede ayudar a eludir las restricciones de CORS, solo puede imponer restricciones adicionales a las capacidades dentro del iframe.
Puede usar el método window.postMessage() para la comunicación de origen cruzado entre una página y un iframe incrustado en ella.