我刚刚将我的博客从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通信的更多信息:
规避同源策略的方法