javascript iframe:从https访问http

时间:2014-09-04 16:26:31

标签: javascript html iframe amazon-s3

我有一个页面,其中包含一个从amazon aws s3存储桶加载html模板的iframe。在iframe中,我想获取父窗口的链接,然后添加一些参数。

例如:我的父窗口有http://xx.xx.x.xxx:8088链接。我想拿这个网址,apprend"#abc / edf"并重定向到该页面。但我不能,因为我的iFrame有网址https://bucketName.s3.amazonaws.com

我得到的错误是

Uncaught SecurityError: Blocked a frame with origin "https://bucketName.s3.amazonaws.com" from accessing a frame with origin "http://xx.xx.x.xxx:8088".  The frame requesting access has a protocol of "https", the frame being accessed has a protocol of "http". Protocols must match.

我用来从iFrame中重定向到另一个页面的javascript

function navigateTo(e){
    var destination = e.data.destination;
    var url = window.parent.location.host;

    window.parent.location.href = url+destination;
}

$("#button").click({destination: "/#abc/edf"}, navigateTo);

HTML

<div id="button"><a href="#">Redirect to another page</a></div>

我不能使用绝对路径是有原因的。父窗口链接将以某种方式更改。我认为最好的解决方案是获取父URL并附加我想要的参数。如何在不收到安全性错误的情况下实现这一目标?

1 个答案:

答案 0 :(得分:1)

简短的回答是&#34;你不能。&#34;

浏览器安全模型排除了客户端的跨域和跨协议脚本。您的https协议下的嵌入式iframe不允许访问(甚至不读取)其父级的非https上下文。

为了做你想做的事,两个上下文必须在原始域和协议上达成一致才能在客户端进行交互。