js跨域问题之跨域iframe自适应大小实现代码


Posted in Javascript onJuly 17, 2010
<body onload="javascript: setHeight();"> 
<script> 
function setHeight(){ 
var dHeight = document.documentElement.scrollHeight; 
var t = document.createElement("div"); 
t.innerHTML = '<iframe id="kxiframeagent" src="http://rest.kaixin001.com/api/agent.html#'+dHeight+'"scrolling="yes" height="0px" width="0px"></iframe>'; 
document.documentElement.appendChild(t.firstChild); 
} 
</script>

我想着跨域如何解决啊!后来去网上搜索了一下子 恍然大悟

具体如下 我是复制过来了 大家重点理解一下子它的实现思路 :

问题:

A域名下的页面a.htm中通过iframe嵌入B域名下的页面b.html,由于b.html的大小等是不可预知而且会变化的,所以需要 a.htm中的iframe自适应大小.

问题本质 :

js的跨域问题,因为要控制a.htm中iframe的大小就必须首先读取得到b.html的大小,A、B不属于同一个域,js的访问受限,读取不 到b.html的大小.

解决方案:

首先前提是A,B是合作关系,b.html中能引入A提供的js

首先a.html中通过iframe引入了b.html

<iframe id="aIframe" height="0" width="0" src="http://www.b.com/html/b.html" frameborder="no" border="0px" marginwidth="0" marginheight="0" scrolling="no" allowtransparency="yes" ></iframe> 
<iframe id="aIframe" height="0" width="0" src="http://www.b.com/html/b.html" frameborder="no" border="0px" marginwidth="0" marginheight="0" scrolling="no" allowtransparency="yes" ></iframe>

B在b.html中引入了A提供的js文件

Html代码

<script language="javascript" type="text/javascript" src="http://www.a.com/js/a.js"></script>

该js首先读取b.html的宽和高,然后创建一个iframe,src为和A同一个域的中间代理页面a_proxy.html,吧读取到的宽和 高设置到src的hash里面

Html代码

<iframe id="iframeProxy" height="0" width="0" src="http://www.a.com/html/a_proxy.html#width|height" style="display:none" ></iframe>

a_proxy.html是A域下提供好的中间代理页面,它负责读取location.hash里面的width和height的值,然后设置与 它同域下的a.html中的iframe的宽和高.

Js代码

var pParentFrame = parent.parent.document.getElementById("aIframe"); 
var locationUrlHash = parent.parent.frames["aIframe"].frames["iframeProxy"].location.hash; 
pParentFrame.style.width = locationUrlHash.split("#")[1].split("|")[0]+"px"; 
pParentFrame.style.height = locationUrlHash.split("#")[1].split("|")[1]+"px"; 
var pParentFrame = parent.parent.document.getElementById("aIframe"); 
var locationUrlHash = parent.parent.frames["aIframe"].frames["iframeProxy"].location.hash; 
pParentFrame.style.width = locationUrlHash.split("#")[1].split("|")[0]+"px"; 
pParentFrame.style.height = locationUrlHash.split("#")[1].split("|")[1]+"px";

这样的话a.html中的iframe就自适应为b.html的宽和高了.

其他一些类似js跨域操作问题也可以按这个思路去解决

Javascript 相关文章推荐
js 动态添加标签(新增一行,其实很简单,就是几个函数的应用)
Mar 26 Javascript
IE6,IE7,IE8下使用Javascript记录光标选中范围(已补全)
Aug 28 Javascript
angular.bind使用心得
Oct 26 Javascript
JS排序方法(sort,bubble,select,insert)代码汇总
Jan 30 Javascript
jQuery解决浏览器兼容性问题案例分析
Apr 15 Javascript
JS中sort函数排序用法实例分析
Jun 16 Javascript
原生js实现秒表计时器功能
Feb 16 Javascript
node版本管理工具n包使用教程详解
Nov 09 Javascript
非常漂亮的js烟花效果
Mar 10 Javascript
JavaScript进阶(一)变量声明提升实例分析
May 09 Javascript
axios解决高并发的方法:axios.all()与axios.spread()的操作
Nov 09 Javascript
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
Aug 05 Vue.js
javascript下对于事件、事件流、事件触发的顺序随便说说
Jul 17 #Javascript
jQuery Select(单选) 模拟插件 V1.3.62 改进版
Jul 17 #Javascript
基于jquery的Repeater实现代码
Jul 17 #Javascript
javascript onmouseout 解决办法
Jul 17 #Javascript
javascript 从if else 到 switch case 再到抽象
Jul 17 #Javascript
用JavaScript对JSON进行模式匹配 (Part 2 - 实现)
Jul 17 #Javascript
用JavaScript对JSON进行模式匹配(Part 1-设计)
Jul 17 #Javascript
You might like
实现分十页分向前十页向后十页的处理
2006/10/09 PHP
PHP 存储文本换行实现方法
2010/01/05 PHP
php实现将上传word文件转为html的方法
2015/06/03 PHP
深入浅析PHP7.0新特征(五大新特征)
2015/10/29 PHP
Zend Framework+smarty用法实例详解
2016/03/19 PHP
php实现评论回复删除功能
2017/05/23 PHP
PHP中localeconv()函数的用法
2019/03/26 PHP
juqery 学习之五 文档处理 插入
2011/02/11 Javascript
jQuery图片预加载 等比缩放实现代码
2011/10/04 Javascript
可简单避免的三个JS发布错误的详细介绍
2013/08/02 Javascript
提高jQuery性能优化的技巧
2015/08/03 Javascript
关于JS中match() 和 exec() 返回值和属性的测试
2016/03/21 Javascript
vue+mockjs模拟数据实现前后端分离开发的实例代码
2017/08/08 Javascript
判断iOS、Android以及PC端的示例代码
2018/11/15 Javascript
如何基于JavaScript判断图片是否加载完成
2019/12/28 Javascript
浅谈vue单页面中有多个echarts图表时的公用代码写法
2020/07/19 Javascript
封装Vue Element的table表格组件的示例详解
2020/08/19 Javascript
使用webpack5从0到1搭建一个react项目的实现步骤
2020/12/16 Javascript
[53:21]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS LGD-CDEC
2014/05/22 DOTA
[34:39]Secret vs VG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
Python实现按学生年龄排序的实际问题详解
2017/08/29 Python
遗传算法之Python实现代码
2017/10/10 Python
python 去除txt文本中的空格、数字、特定字母等方法
2018/07/24 Python
selenium+python自动化测试之环境搭建
2019/01/23 Python
解决Django生产环境无法加载静态文件问题的解决
2019/04/23 Python
CSS3模拟IOS滑动开关效果
2016/09/28 HTML / CSS
山海经纬软件测试笔试题和面试题
2013/04/02 面试题
火山动力Java笔试题
2014/06/26 面试题
计算机售后服务承诺书
2014/05/30 职场文书
科学育儿宣传标语
2014/10/08 职场文书
毕业生对母校寄语
2015/02/26 职场文书
土建技术员岗位职责
2015/04/11 职场文书
离职证明范本
2015/06/12 职场文书
2016年教师学习廉政准则心得体会
2016/01/20 职场文书
redis调用二维码时的不断刷新排查分析
2022/04/01 Redis
MySQL详细讲解变量variables的用法
2022/06/21 MySQL