跨域资源共享标头可以授权X域IFRAME访问吗?

9 iframe cross-domain same-origin-policy cors

当包含页面和内容页面不是来自同一个域时,调整IFRAME的高度以匹配其内容页面的高度可能是一个真正的阻力.

跨域资源共享(CORS)标头是否允许内容页面授权跨域访问其资源,从而允许其包含页面读取其高度?(或者,包含页面授权内容页面宣布其高度?)

或者CORS严格来说是一个AJAX的东西?

Pau*_*ulG 17

CORS不允许您这样做,但您可以使用跨文档消息传递在iframe及其父窗口之间发送字符串,甚至在不同的域上,并使用它来进行通信.

虽然Internet Explorer的方式其他浏览器不同,但大多数浏览器都支持此功能.

假设你想要的是让iframe向父页面宣告它所需的高度,你可以把它放在你的iframe代码中(未测试):

var message = {
    width: desiredWidth,
    height: desiredHeight
};
window.parent.postMessage(JSON.stringify(message),'*');
Run Code Online (Sandbox Code Playgroud)

这在你的包含页面中:

function onMessage (event) {
    if (event.source != theIFrameElement.contentWindow) return;
    var message = JSON.parse(event.data);
    var desiredHeight = message.height;
    var desiredWidth = message.width;   
}

if (window.attachEvent)
    window.attachEvent('onmessage', onMessage);
else if (window.addEventListener)
    window.addEventListener('message', onMessage, false);
Run Code Online (Sandbox Code Playgroud)

attachEvent用于IE,addEventListener用于其他所有人.出于安全考虑,您可能希望检查目标原点,但这是一般的想法.

编辑:浏览器支持跨文档消息传递(-fsb)

  • 这是一个浏览器支持表.我只能添加2个链接到我的答案,因为我没有足够的代表更多.http://caniuse.com/x-doc-messaging (2认同)