我已經被一個頁面上創建了一個iframe和頁面的域名被明確設置爲「xyz.com」但iframe的域默認爲「dev.xyz.com」,這是我正在開發的實際域名。跨域iframe通信
的問題是,當我嘗試訪問通過iframe.contentWindow.document該iframe,它失敗,因爲在域的差別。
我已經試過了iframe的src設置與document.domain的=「xyz.com」,但文件似乎沒有在做的伎倆......
任何想法?
我已經被一個頁面上創建了一個iframe和頁面的域名被明確設置爲「xyz.com」但iframe的域默認爲「dev.xyz.com」,這是我正在開發的實際域名。跨域iframe通信
的問題是,當我嘗試訪問通過iframe.contentWindow.document該iframe,它失敗,因爲在域的差別。
我已經試過了iframe的src設置與document.domain的=「xyz.com」,但文件似乎沒有在做的伎倆......
任何想法?
頁內的iframe:
<script>
document.domain = document.domain;
</script>
它看起來很傻,但它的工作原理。請參閱「What does document.domain = document.domain do?」。
經過一番研究,我發現這個jQuery plugin,使使用各種招數舊版本瀏覽器的postMessage向後兼容。
這裏是展示如何將iframe的身體的高度發送到父窗口一個簡單的例子:
在主機(父)頁面:
// executes when a message is received from the iframe, to adjust
// the iframe's height
$.receiveMessage(
function(event){
$('my_iframe').css({
height: event.data
});
});
// Please note this function could also verify event.origin and other security-related checks.
在iframe的頁面:
$(function(){
// Sends a message to the parent window to tell it the height of the
// iframe's body
var target = parent.postMessage ? parent : (parent.document.postMessage ? parent.document : undefined);
$.postMessage(
$('body').outerHeight(true) + 'px',
'*',
target
);
});
我已經在Chrome 13+,火狐3.6或更高版本,IE7,8和9 XP測試這和W7,OSX和W7上的Safari。 ;)
作爲除參照本Alman 插上我以爲我會發布這方面的工作的例子。它支持一個iframe,它有一個包含jquery認證的源頁面&數據查詢腳本,然後使用消息插件將結果傳遞給{other domain}父窗口。
NB消息的插件將打破如果使用JQ V9作爲JQV9不使用「瀏覽器」在插件引用
第一步驟: 插件的代碼添加到發送和接收文檔:
http://benalman.com/projects/jquery-postmessage-plugin/
第2步: 一下添加到發送文檔:
$.postMessage(
$(X).html(),
'http://DOMAIN [PORT]/FOLDER/SUBFOLDER/RECIEVINGDOCNAME.XXX'
) ;
其中X可以是包含預格式化的JSON陣列或其他東西,這裏的HTTP URL一個局部變量是在接收文件的地址。
第三步: 一下添加到接收DOC:
$.receiveMessage(
function(event){
alert("event.data: "+event.data);
$("#testresults").append('<h1>'+event.data+'<h1>');
},
'http://DOMAIN.COM OR SOMETHING'
);
凡HTTP URL是發送文件的域。 擅長IE 8,9,FF16,Safari瀏覽器(Windows等待x V9未測試),safari x mac的東西。
結果是你想從另一個域頁面(你有權訪問..)的任何項目。
作爲後續工作,下面是創建iframe並嘗試訪問它的代碼: jQuery(「body」)。prepend('
這個庫支持HTML5 postMessage和舊版瀏覽器,其中包含resize + hash https://github.com/ternarylabs/porthole(Ben Alman的jQuery插件3年未觸及) – jpillora 2013-02-27 14:43:58
Ben Alman有一個很棒的jquery插件,可以用來解決這個問題。 http://benalman.com/projects/jquery-postmessage-plugin/ – Justin 2011-04-06 13:46:56