我在页面上创建了iframe,并且页面的域名被明确设置为“xyz.com”,但iframe的域名默认为“dev.xyz.com”,这是我真正的域名发展为。
问题是,当我尝试通过iframe.contentWindow.document访问iframe时,由于域名不同而失败。
我已经尝试将iframe的src设置为带有document.domain ='xyz.com'的文件,但这似乎没有做到这一点......
有什么想法吗?
答案 0 :(得分:11)
iframe中的网页:
<script>
document.domain = document.domain;
</script>
看起来很傻,但它确实有效。请参阅“What does document.domain = document.domain do?”。
答案 1 :(得分:8)
经过一些研究,我发现这个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
);
});
我在XP和W7上的Chrome 13 +,Firefox 3.6 +,IE7,8和9上进行了测试,在OSX和W7上进行了测试。 ;)
答案 2 :(得分:0)
作为对Ben Alman的参考的补充 插上我以为我会发布这个工作示例。它是一个iframe的rRelies,它有一个包含jquery身份验证的源页面&amp;数据查询脚本,然后使用消息插件将结果传递给{other domain}父窗口。
如果使用JQ v9,NB消息插件将中断,因为JQV9不使用插件中引用的“浏览器”
第一步: 将插件代码添加到发送和接收文档:
http://benalman.com/projects/jquery-postmessage-plugin/
第二步: 将其添加到发送文档:
$.postMessage(
$(X).html(),
'http://DOMAIN [PORT]/FOLDER/SUBFOLDER/RECIEVINGDOCNAME.XXX'
) ;
其中X可以是包含预先格式化的json数组或其他内容的本地var,这里的http url是接收文档的地址。
第3步: 将此添加到接收文档:
$.receiveMessage(
function(event){
alert("event.data: "+event.data);
$("#testresults").append('<h1>'+event.data+'<h1>');
},
'http://DOMAIN.COM OR SOMETHING'
);
http url是发送文档的DOMAIN。 擅长IE 8,9,FF16,safari Windows(windows等x V9尚未测试),safari x mac thing。
结果是您想要从另一个域页(您有权访问..)的任何项目。