跨域 iframe 调整大小

11 浏览
0 Comments

跨域 iframe 调整大小

我如何从另一个域调整iframe的大小?

过去几天我一直试图将一个iframe集成到网站中。这是一个临时解决方案,因为另一方正在开发一个API(可能需要几个月时间...)

由于这是一个临时解决方案,我们不想使用easyXDM-我可以访问另一个域,但是要求他们添加p3p头部已经够困难了...

3个iframes

我找到的最接近的解决方案是使用3个iframes-但是在Chrome和Safari上运行不正常,所以我无法使用它。

在Chrome中打开

http://css-tricks.com/examples/iFrameResize/crossdomain.php#frameId=frame-one&height=1179

测量滚动条

我找到了另一篇关于如何使用滚动高度来调整表单大小的帖子...理论上它工作得很好,但我无法正确地应用它来使用iframes的滚动高度...

document.body.scrollHeight

显然使用了body的高度(不能完全访问这些属性,因为它们基于客户端显示画布而不是跨域文档的高度)

我尝试使用jQuery获取iframes的高度

$('#frameId').Height()
$('#frameId').clientHeight
$('#frameId').scrollHeight

在Chrome和IE中返回不同的值-或者根本没有意义。

问题是框架内的所有内容都被拒绝-甚至是滚动条...

计算样式

但是如果我在Chrome中检查iframe中的元素,它会糟糕地显示iframe内部的文档尺寸(使用jQuery跨域获取iframe.heigh-访问被拒绝)

计算的CSS中没有任何内容

那么Chrome是如何计算的?(编辑-浏览器重新使用其内置渲染引擎重新渲染页面以计算所有这些设置-但没有附加在任何地方以防止跨域欺诈...所以...)

HTML4

我阅读了HTML4.x的规范,它说应该通过document.element公开只读值,但是通过jQuery访问被拒绝

代理框架

我尝试了代理网站并进行计算,这是可以的...直到用户通过iframe登录,代理得到的是登录页面而不是实际内容。对于某些人来说,调用页面两次是不可接受的

http://www.codeproject.com/KB/aspnet/asproxy.aspx

http://www.johnchapman.name/aspnet-proxy-page-cross-domain-requests-from-ajax-and-javascript/

重新渲染页面

我没有走得这么远,但是存在一些JavaScript引擎,它们会根据源文件查看并重新渲染页面。但是这需要对这些JavaScript进行破解...这对于商业实体来说并不是理想的情况...

还有一些调用纯Java小程序或服务器端渲染的方法

http://en.wikipedia.org/wiki/Server-side_JavaScript

http://htmlunit.sourceforge.net/ <-java不是jscript

http://maxq.tigris.org/


所有这些都可以使用HTML5套接字完成。但是easyXDM是非HTML5兼容页面的很好的备选方案。

解决方案1非常好!

使用easyXDM

在您的服务器上设置一个页面,格式如下:








在调用者的域中,他们只需要在同一位置添加intermediate_frame HTML和easyXDM.js。像一个父文件夹-然后您可以访问相对目录或一个专门为您提供的包含文件夹。

0