允许iframe链接到跨域的目标父框架

时间:2011-05-30 16:37:41

标签: javascript html security

我有2个域名。 domain1上的一个页面使用iframe从domain2加载内容。如何在domain1上的完整父框架中打开domain2(iframe内部)中的链接?

我一直在关注IE application attribute和w3c的新sandbox attribute,但我不确定如何实现这些以及它们是否兼容跨浏览器。有没有任何其他技巧来解决这个问题?

我可以用javascript像素做点什么吗?

2 个答案:

答案 0 :(得分:2)

您需要使用postMessage()跨域发送数据。

<强> 1。对domain2.com上的链接进行编码(iframe中的链接):

<a href="javascript:;" onclick="top.postMessage('newpage.html','http://domain2.com')"></a>

<强> 2。在domain1.com(父页面)页面的头部抓住消息并导航:

window.addEventListener( "message", function(e){
    window.location.href = e.data  //navigates to newpage.html
}, false)

类似问题here如果您需要更多详情。对于&lt; IE8和其他旧浏览器,有一些hacky变通方法on this page看起来相当全面。

答案 1 :(得分:1)

您可以使用Javascript覆盖A标记并将它们指向window.parent。

http://jfcoder.com/test/iframe_open.html

window.onload = function(){
    var a = document.getElementsByTagName('a');
    for (var i = 0; i < a.length; i++) {
        a[i]['_href'] = a[i].href;
        a[i].href = '#';
        a[i].onclick = function(){
            window.parent.location = this._href;
            return false;
        }
    }
}

显然,这不是您在最终代码中必须使用的代码,只是一个概念验证。但这适用于IE9,FF4和Chrome(当前),没有任何问题。