从 AWS S3 加载的 iframe 的同源问题



我刚刚将我的博客从wordpress更改为django-zinnia。Zinnia在django-admin中使用WYMeditor(https://github.com/wymeditor/wymeditor)iframe进行博客文章文本和内容输入,现在由于同源问题,我无法访问iframe。我在浏览器控制台中看到的错误是:

Blocked a frame with origin "http://www.mydomain.com" from accessing a frame with origin "http://mybucket.s3.amazonaws.com". 
Protocols, domains, and ports must match.
WYMeditor.WymClassSafari.initIframe 
onload

是否可以在存储桶的 CORS 配置中更新参数以允许 iframe 跨源加载?我已经有

 <AllowedOrigin>http://www.mydomain.com</AllowedOrigin> 

在我目前的 CORS 规则中:

<?xml version="1.0" encoding="UTF-8"?>
    <CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
         <CORSRule>
             <AllowedOrigin>http://mydomain.herokuapp.com</AllowedOrigin>
             <AllowedOrigin>http://mydomain.com</AllowedOrigin>
             <AllowedOrigin>http://www.mydomain.com</AllowedOrigin>
             <AllowedMethod>GET</AllowedMethod>
             <MaxAgeSeconds>3000</MaxAgeSeconds>
             <AllowedHeader>Content-*</AllowedHeader>
             <AllowedHeader>Host</AllowedHeader>
             <AllowedHeader>Authorization</AllowedHeader>
        </CORSRule>
   </CORSConfiguration>

CORS 标头不会影响 Safari 中 iframe 的同源策略。

您可以使用 postMessage 在帧之间进行通信,也可以将子域从 mydomain.com 附加到 S3 存储桶,并通过设置document.domain放宽同源策略(此方法仅适用于同一域的子域之间的通信,不适用于不同域之间的通信)。

您可以从StackOverflow上的这个答案中了解有关iframe通信的更多信息:

规避同源策略的方法

相关内容

  • 没有找到相关文章