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性能优化小技巧整理
Nov 05 Javascript
JS和JQUERY获取页面大小,滚动条位置,元素位置(示例代码)
Dec 14 Javascript
node.js中的fs.fchown方法使用说明
Dec 16 Javascript
jquery 中ajax执行的优先级
Jun 22 Javascript
jQuery删除当前节点元素
Dec 07 Javascript
AngularJs定时器$interval 和 $timeout详解
May 25 Javascript
jquery实现左右轮播图效果
Sep 28 jQuery
谈谈JS中的!!
Dec 07 Javascript
AngularJS实现的生成随机数与猜数字大小功能示例
Dec 25 Javascript
Node.js net模块功能及事件监听用法分析
Jan 05 Javascript
使用vue自定义指令开发表单验证插件validate.js
May 23 Javascript
vue监听dom大小改变案例
Jul 29 Javascript
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
解析PHP自带的进位制之间的转换函数
2013/06/08 PHP
Yii操作数据库的3种方法
2014/03/11 PHP
在PHP模板引擎smarty生成随机数的方法和math函数详解
2014/04/24 PHP
php基于mcrypt的加密解密实例
2014/10/27 PHP
thinkphp常见路径用法分析
2014/12/02 PHP
PHP编程获取各个时间段具体时间的方法
2017/05/26 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
通过上下左右键和回车键切换光标实现代码
2013/03/08 Javascript
JavaScript实现网站访问次数统计代码
2015/08/12 Javascript
JS实现的左侧竖向滑动菜单效果代码
2015/10/19 Javascript
Javascript操作表单实例讲解(下)
2016/06/20 Javascript
ES6正则表达式的一些新功能总结
2017/05/09 Javascript
详解angularJS+Ionic移动端图片上传的解决办法
2017/09/13 Javascript
详解webpack自定义loader初探
2018/08/29 Javascript
js使用swiper实现层叠轮播效果实例代码
2018/12/12 Javascript
react native 原生模块桥接的简单说明小结
2019/02/26 Javascript
详解ES6中的Map与Set集合
2019/03/22 Javascript
Vue实现拖放排序功能的实例代码
2019/07/08 Javascript
vue中是怎样监听数组变化的
2020/10/24 Javascript
[02:49]DAC2018决赛日TOP5 LGD开启黑暗之门绝杀VP
2018/04/08 DOTA
[02:07]TI9显影之尘系列 - Vici Gaming
2019/08/20 DOTA
python从ftp下载数据保存实例
2013/11/20 Python
python绘图库Matplotlib的安装
2014/07/03 Python
用Python实现一个简单的能够上传下载的HTTP服务器
2015/05/05 Python
详解Python中的__getitem__方法与slice对象的切片操作
2016/06/27 Python
python实现数据图表
2017/07/29 Python
Python根据指定日期计算后n天,前n天是哪一天的方法
2018/05/29 Python
Python3实现将本地JSON大数据文件写入MySQL数据库的方法
2018/06/13 Python
Python 字符串与二进制串的相互转换示例
2018/07/23 Python
Python面向对象程序设计OOP深入分析【构造函数,组合类,工具类等】
2019/01/05 Python
python处理DICOM并计算三维模型体积
2019/02/26 Python
Python实现密码薄文件读写操作
2019/12/16 Python
英国领先的在线高尔夫商店:Scottsdale Golf
2019/08/26 全球购物
毕业生医学检验求职信
2013/10/16 职场文书
经贸日语专业个人求职信
2013/12/13 职场文书
市级三好学生事迹材料
2014/08/27 职场文书