我有一个包含 2 个 iFrame 的网页。它们都具有固定的宽度和高度。我正在其中加载外部网站。如何调整这些外部网站的宽度以适应 iFrame(就像移动浏览器通过更改视口所做的那样)?
2 回答
您可以做的是为您的 iframe 设置特定的宽度和高度(例如,这些可能等于您的窗口尺寸),然后对其应用缩放转换。比例值将是您的窗口宽度与您要设置到 iframe 的尺寸之间的比率。
例如
<iframe width="1024" height="768" src="http://www.bbc.com" style="-webkit-transform:scale(0.5);-moz-transform-scale(0.5);"></iframe>
1 个网站调整高度大小的提示。但是您可以更改为 2 个网站。
这是我使用外部网站调整 iframe 大小的代码。您需要在父(带有 iframe 代码)页面和外部网站中插入代码,因此,这不适用于您无权编辑外部网站。
- 本地(iframe)页面:只需插入代码片段
- 远程(外部)页面:您需要一个“body onload”和一个包含所有内容的“div”。并且正文需要设置为“margin:0”
当地的:
<IFRAME STYLE="width:100%;height:1px" SRC="http://www.remote-site.com/" FRAMEBORDER="no" BORDER="0" SCROLLING="no" ID="estframe"></IFRAME>
<SCRIPT>
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
eventer(messageEvent,function(e) {
if (e.data.substring(0,3)=='frm') document.getElementById('estframe').style.height = e.data.substring(3) + 'px';
},false);
</SCRIPT>
您需要这个“frm”前缀来避免其他嵌入代码(如 Twitter 或 Facebook 插件)出现问题。如果您有一个普通页面,则可以删除两个页面(脚本和 onload)上的“if”和“frm”前缀。
偏僻的:
您需要 jQuery 来完成“真实”页面高度。我无法意识到如何使用纯 JavaScript,因为在使用 body.scrollHeight 或相关调整高度(从高到低)时会遇到问题。出于某种原因,它将始终返回最大高度(预先调整尺寸)。
<BODY onload="parent.postMessage('frm'+$('#master').height(),'*')" STYLE="margin:0">
<SCRIPT SRC="path-to-jquery/jquery.min.js"></SCRIPT>
<DIV ID="master">
your content
</DIV>
因此,父页面 (iframe) 的默认高度为 1px。该脚本从 iframe 插入“等待消息/事件”。当收到一条消息(post message)并且前 3 个字符是“frm”(以避免提到的问题)时,将从第 4 个位置获取数字并设置 iframe 高度(样式),包括 'px' 单位。
外部站点(加载在 iframe 中)将使用“frm”和主 div 的高度(在本例中为 id“master”)向父级(opener)“发送消息”。邮件中的“*”表示“任何来源”。
希望这可以帮助。对不起我的英语不好。