调整IFRAME的高度以匹配其内容页面的高度真的很麻烦,特别是当包含和内容页面不属于同一域时。CORS头信息是否可以使内容页面授权跨域访问其资源,并允许包含页读取其高度?(或者,替代方案是包含页面授权内容页面宣布其高度?)CORS是否只限于AJAX?
CORS不允许您这样做,但是您可以使用跨文档消息传递在不同域名的iframe和其父窗口之间发送字符串以进行通信。
大多数浏览器都支持这种方式,虽然Internet Explorer的方式与其他浏览器不同。
假设您想要的是让iframe向父页面宣布其所需的高度,则可以将此代码放入您的iframe代码中(未经测试):
var message = {
width: desiredWidth,
height: desiredHeight
};
window.parent.postMessage(JSON.stringify(message),'*');
同时在你的包含页面中添加以下内容:
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);
attachEvent 是针对 IE 浏览器,addEventListener 是针对其他浏览器。出于安全考虑,您可能希望检查目标源,但这是一般想法。
编辑: 跨文档通信的浏览器支持 (—fsb)
onmessage
的浏览器是现代浏览器吗?如IE8、FF3等? - user213154