2011-05-30 77 views
1

我有2個域。 domain1上的一個頁面使用iframe從domain2加載內容。我如何允許在domain1上的完整父框架中打開來自domain2(在iframe內)的鏈接?允許iframe鏈接到目標父框架跨域

我一直在看IEs application attribute和W3C的新sandbox attribute,但我不確定如何實現這些,如果他們兼容跨瀏覽器。有任何其他技巧來解決這個問題嗎?

有什麼我可以做一個JavaScript像素可能嗎?

+0

您是否在iframe中的鏈接上嘗試過'target =「_ parent」。 – Niklas 2011-05-30 16:53:24

+0

是的,頁面加載在一個新的窗口和鉻引發錯誤:'不安全的JavaScript嘗試啓動導航更改' – cronoklee 2011-05-30 17:08:56

回答

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如果您需要更多detais。對於< IE8和其他舊瀏覽器,有一些hacky解決方法on this page看起來相當全面。

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(當前)沒有任何問題。

+0

這是否與'click'相同?因爲這也會引發安全錯誤。 – cronoklee 2011-05-31 15:01:31

+0

不是。 Jared發佈的是不相同的代碼。 – 2013-03-28 14:27:40