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 相关文章推荐
javascript 触发事件列表 比较不错
Sep 03 Javascript
Javascript 类与静态类的实现
Apr 01 Javascript
Javascript中Event属性搜集整理
Sep 17 Javascript
跟我学习javascript的函数和函数表达式
Nov 16 Javascript
jquery正则表达式验证(手机号、身份证号、中文名称)
Dec 31 Javascript
JS动态插入并立即执行回调函数的方法
Apr 21 Javascript
vue2.0开发实践总结之入门篇
Dec 06 Javascript
解决微信二次分享不显示摘要和图片的问题
Aug 18 Javascript
JavaScript 保护变量不被随意修改的实现代码
Sep 27 Javascript
微信小程序实现同一页面取值的方法分析
Apr 30 Javascript
vue发送websocket请求和http post请求的实例代码
Jul 11 Javascript
vue组件冲突之引用另一个组件出现组件不显示的问题
Apr 13 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
针对初学PHP者的疑难问答(1)
2006/10/09 PHP
php读取excel文件示例分享(更新修改excel)
2014/02/27 PHP
PHP中读取照片exif信息的方法
2014/08/20 PHP
PHP基于yii框架实现生成ICO图标
2015/11/13 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
jquery中的过滤操作详细解析
2013/12/02 Javascript
Nodejs实战心得之eventproxy模块控制并发
2015/10/27 NodeJs
JS动态给对象添加事件的简单方法
2016/07/19 Javascript
BootStrap table删除指定行的注意事项(笔记整理)
2017/02/05 Javascript
最常见和最有用的字符串相关的方法详解
2017/02/06 Javascript
jQuery实现遍历复选框的方法示例
2017/03/06 Javascript
js指定步长实现单方向匀速运动
2017/07/17 Javascript
Angular4.0中引入laydate.js日期插件的方法教程
2017/12/25 Javascript
vue请求数据的三种方式
2020/03/04 Javascript
基于js实现逐步显示文字输出代码实例
2020/04/02 Javascript
js校验开始时间和结束时间
2020/05/26 Javascript
JavaScript this指向相关原理及实例解析
2020/07/10 Javascript
详解js中的原型,原型对象,原型链
2020/07/16 Javascript
Python2.X/Python3.X中urllib库区别讲解
2017/12/19 Python
异步任务队列Celery在Django中的使用方法
2018/06/07 Python
python读取文件名并改名字的实例
2019/01/07 Python
python 获取毫秒数,计算调用时长的方法
2019/02/20 Python
python3对拉勾数据进行可视化分析的方法详解
2019/04/03 Python
Python 序列化和反序列化库 MarshMallow 的用法实例代码
2020/02/25 Python
Python3 assert断言实现原理解析
2020/03/02 Python
python自动化测试三部曲之request+django实现接口测试
2020/10/07 Python
CSS3实现闪烁动画效果的方法
2015/02/09 HTML / CSS
HTML5实现可缩放时钟代码
2017/08/28 HTML / CSS
Magee 1866官网:Donegal粗花呢外套和大衣专家
2019/11/01 全球购物
外贸业务员的岗位职责
2013/11/23 职场文书
高中化学教学反思
2014/01/13 职场文书
个人债务授权委托书范本
2014/10/05 职场文书
2015年党员公开承诺书范文
2015/01/22 职场文书
介绍信模板
2015/01/31 职场文书
MBA推荐信怎么写
2015/03/25 职场文书
再读《皇帝的新衣》的读后感悟!
2019/08/07 职场文书