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 相关文章推荐
经典的带阴影的可拖动的浮动层
Jun 26 Javascript
Jquery插件写法笔记整理
Sep 06 Javascript
CSS(js)限制页面显示的文本字符长度
Dec 27 Javascript
IE6下拉框图层问题探讨及解决
Jan 03 Javascript
js showModalDialog参数的使用详解
Jan 07 Javascript
浅谈javascript:两种注释,声明变量,定义函数
Oct 05 Javascript
JQuery Ajax 异步操作之动态添加节点功能
May 24 jQuery
使用vux实现上拉刷新功能遇到的坑
Feb 08 Javascript
Node.js在图片模板上生成二维码图片并附带底部文字说明实现详解
Aug 07 Javascript
使用p5.js临摹动态图形
Oct 23 Javascript
JS倒计时两种实现方式代码实例
Jul 27 Javascript
Node.js实现断点续传
Jun 23 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操作MongoDB类实例
2015/06/17 PHP
thinkphp利用模型通用数据编辑添加和删除的实例代码
2016/11/20 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
PHP操作redis实现的分页列表,新增,删除功能封装类与用法示例
2018/08/04 PHP
laravel框架模型、视图与控制器简单操作示例
2019/10/10 PHP
让ie运行js时提示允许阻止内容运行的解决方法
2010/10/24 Javascript
基于jquery的文章中所有图片width大小批量设置方法
2013/08/01 Javascript
jQuery数据类型小结(14个)
2016/01/08 Javascript
解决IE7中使用jQuery动态操作name问题
2017/08/28 jQuery
js对象实例详解(JavaScript对象深度剖析,深度理解js对象)
2017/09/21 Javascript
JQuery 又谈ajax局部刷新
2017/11/27 jQuery
基于vue1和vue2获取dom元素的方法
2018/03/17 Javascript
对Angular中单向数据流的深入理解
2018/03/31 Javascript
vue.js 实现点击按钮动态添加li的方法
2018/09/07 Javascript
用javascript实现倒计时效果
2021/02/09 Javascript
使用Python判断质数(素数)的简单方法讲解
2016/05/05 Python
Python实现的朴素贝叶斯分类器示例
2018/01/06 Python
Python理解递归的方法总结
2019/01/28 Python
全面了解django的缓存机制及使用方法
2019/07/22 Python
python flask web服务实现更换默认端口和IP的方法
2019/07/26 Python
基于spring boot 日志(logback)报错的解决方式
2020/02/20 Python
python 爬取小说并下载的示例
2020/12/07 Python
巧用CSS3 border实现图片遮罩效果代码
2012/04/09 HTML / CSS
Html5移动端弹幕动画实现示例代码
2018/08/27 HTML / CSS
HTML5计时器小例子
2013/10/15 HTML / CSS
英国高街奥特莱斯:Highstreet Outlet
2019/11/21 全球购物
西班牙在线光学:Visual-Click
2020/06/22 全球购物
成功的餐厅经营创业计划书
2014/01/15 职场文书
酒店总经理助理职责
2014/02/12 职场文书
副护士长竞聘演讲稿
2014/04/30 职场文书
效能风暴心得体会
2014/09/04 职场文书
打架赔偿协议书范本
2014/10/26 职场文书
入党培养人考察意见
2015/06/08 职场文书
详解Django中 render() 函数的使用方法
2021/04/22 Python
PyTorch 如何设置随机数种子使结果可复现
2021/05/12 Python
从结婚开始的恋爱故事。小说《我的美好婚事》TV动画化决定
2022/04/07 日漫