如果它在另一个域上的来源时如何更改IFRAME高度?

时间:2012-02-27 15:48:19

标签: javascript jquery html iframe height

我认为这个选项不可用,但也许你知道这样做的一些策略! 我在http://www.mydomain.com上,并且我将iframe与另一个域的jquery放在一起:

​<div id="myContent​​​​​​​"></div>​

$('#myContent').html('<iframe id="myFrame" src="www.anotherdomain.com"></iframe>');​

好吧,我加载的页面,www.anotherdomain.com,它是我的,所以我可以添加任何类型的代码!

我想要做的是将myFrame的高度设置为加载页面的实际大小(我无法知道,它可以在此期间发生变化)。

是否有一种方法可以将父DOM(mydomain.com)与插入页面的大小(anotherdomain.com)进行通信?

我不知道,我这么说,但为什么不问。

3 个答案:

答案 0 :(得分:2)

您可以使用postMessage在不同域上的iframe之间发送消息(例如帧的高度):https://developer.mozilla.org/en/DOM/window.postMessage

答案 1 :(得分:1)

跨域通信非常有限,根据远程主机上的不可能,这是不可能的。 http://www.ibm.com/developerworks/library/wa-aj-jsonp1/您可以使用JSONP尝试从远程站点检索信息,但它非常有用,而不是初学者。

我发现对我有用的工作是我使用服务器端语言来包含远程文件。所以不是&lt; iframe&gt;

我做了一个PHP服务器端包括:

<?php include 'http://www.example.com/file.txt?foo=1&bar=2'; ?>

这当然只适用于使用PHP的情况。一旦我以这种方式包含它,我就能够操纵DOM元素。

答案 2 :(得分:1)

我找到的唯一解决方案是通过url传递iframe高度。你可以在这里找到我的测试:

http://jsfiddle.net/Grsmto/nBWrJ/2/ (已更新)

此解决方案适用于跨浏览器(chrome,ff,即所有版本,移动等)和跨域。

您必须能够访问iframe代码本身和iframe主机。 只需调用iframe中的publishHeight()函数,即可在需要时刷新iframe高度(即使内容发生变化)。

这应该在没有jquery的情况下工作(主要是在纯javascript中编写的......)。 唯一不方便的是,您将在网址中拥有高度,如:

http://www.yourdomain.com/index.html#1458px

但你应该轻松​​删除它或将其改为不那么丑陋的东西。

编辑:似乎Disqus和Twitter使用此库来执行此操作:http://easyxdm.net/wp/

编辑2:在您的页面上,您将代码放在第一个jsfiddle页面上。在你的iframe中你放了iframe的代码(红色div“myiframe”在右下角)。希望很清楚...... 但是检查下面的链接应该是一个更好更容易的解决方案。