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 相关文章推荐
发两个小东西,ASP/PHP 学习工具。 用JavaScript写的
Apr 12 Javascript
javascript 浏览器检测代码精简版
Mar 04 Javascript
js列举css中所有图标的实现代码
Jul 04 Javascript
JS实现程序暂停与继续功能代码解读
Oct 10 Javascript
Jquery 实现弹出层插件
Jan 28 Javascript
js倒计时简单实现方法
Dec 17 Javascript
Angularjs渲染的 using 指令的星级评分系统示例
Nov 09 Javascript
vue2.0.js的多级联动选择器实现方法
Feb 09 Javascript
优雅的elementUI table单元格可编辑实现方法详解
Dec 23 Javascript
mocha的时序规则讲解
Feb 16 Javascript
javascript 原型与原型链的理解及应用实例分析
Feb 10 Javascript
前端 javascript 实现文件下载的示例
Nov 24 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 方便水印和缩略图的图形类
2009/05/21 PHP
ThinkPHP3.1新特性之Action参数绑定
2014/06/19 PHP
php中JSON的使用与转换
2015/01/14 PHP
php中使用sftp教程
2015/03/30 PHP
laravel实现Auth认证,登录、注册后的页面回跳方法
2019/09/30 PHP
如何让页面加载完成后执行js
2013/06/26 Javascript
jquery+json实现数据列表分页示例代码
2013/11/15 Javascript
jQuery中获取checkbox选中项等操作及注意事项
2013/11/24 Javascript
javascript实现3D切换焦点图
2015/10/16 Javascript
微信小程序云开发使用方法新手初体验
2019/05/16 Javascript
JQuery插件tablesorter表格排序实现过程解析
2020/05/28 jQuery
maptalks+three.js+vue webpack实现二维地图上贴三维模型操作
2020/08/10 Javascript
Vue3+elementui plus创建项目的方法
2020/12/01 Vue.js
Python 文件操作实现代码
2009/10/07 Python
Python中实现两个字典(dict)合并的方法
2014/09/23 Python
Python自动化构建工具scons使用入门笔记
2015/03/10 Python
用Python从零实现贝叶斯分类器的机器学习的教程
2015/03/31 Python
python扫描proxy并获取可用代理ip的实例
2017/08/07 Python
Python实现基于KNN算法的笔迹识别功能详解
2018/07/09 Python
DataFrame:通过SparkSql将scala类转为DataFrame的方法
2019/01/29 Python
Python中如何使用if语句处理列表实例代码
2019/02/24 Python
python 多进程共享全局变量之Manager()详解
2019/08/15 Python
Python内置方法实现字符串的秘钥加解密(推荐)
2019/12/09 Python
linux环境下安装python虚拟环境及注意事项
2020/01/07 Python
CSS3实现超慢速移动动画效果非常流畅无卡顿
2014/06/15 HTML / CSS
法国购买二手电子产品网站:Asgoodasnew
2020/03/27 全球购物
创业计划书中要认真思考的问题
2013/12/28 职场文书
迟到检讨书400字
2014/01/13 职场文书
晚归检讨书
2014/02/19 职场文书
计算机专业求职信
2014/06/02 职场文书
书法兴趣小组活动总结
2014/07/07 职场文书
工地例会施工汇报材料
2014/08/22 职场文书
事业单位人员的自我评价范文
2014/09/21 职场文书
申报优秀教师材料
2014/12/16 职场文书
财务会计岗位职责
2015/02/03 职场文书
基于Redission的分布式锁实战
2022/08/14 Redis