我有一个在页面上创建的 iframe,页面的域名被明确设置为 "xyz.com",但是 iframe 的域名默认为 "dev.xyz.com",这是我正在开发的实际域名。
问题是,当我尝试通过 iframe.contentWindow.document 访问该 iframe 时,由于域名的差异而失败。
我已经尝试将 iframe 的 src 设置为一个文件,并将 document.domain 设置为 "xyz.com",但似乎没有效果...
有什么想法吗?
我有一个在页面上创建的 iframe,页面的域名被明确设置为 "xyz.com",但是 iframe 的域名默认为 "dev.xyz.com",这是我正在开发的实际域名。
问题是,当我尝试通过 iframe.contentWindow.document 访问该 iframe 时,由于域名的差异而失败。
我已经尝试将 iframe 的 src 设置为一个文件,并将 document.domain 设置为 "xyz.com",但似乎没有效果...
有什么想法吗?
嵌入框架内的页面:
<script>
document.domain = document.domain;
</script>
看起来很傻,但它起作用了。请参见 "What does document.domain = document.domain do?"。
经过一些研究,我找到了这个jQuery插件,它使用各种技巧使postMessage与旧浏览器兼容。
下面是一个快速示例,展示了如何将iframe的body高度发送给父窗口:
在主机(父)页面上:
// 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.
$(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
);
});
http://benalman.com/projects/jquery-postmessage-plugin/
第二步: 将此内容添加到发送文档中:
$.postMessage(
$(X).html(),
'http://DOMAIN [PORT]/FOLDER/SUBFOLDER/RECIEVINGDOCNAME.XXX'
) ;
X 可以是包含预格式化 JSON 数组或其他内容的本地变量,这里的 HTTP URL 是接收文档的地址。
第三步: 将此添加到接收文档中:
$.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(windows wait x V9尚未测试)、safari x mac thing中表现良好。
结果是您想要从另一个域页面中获取的任何项目(只要您有访问权限..)。