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为页面添加天气显示实现思路及代码
Dec 02 Javascript
父节点获取子节点的字符串示例代码
Feb 26 Javascript
jquery动态更换设置背景图的方法
Mar 25 Javascript
node.js超时timeout详解
Nov 26 Javascript
jquery PrintArea 实现票据的套打功能(代码)
Mar 17 Javascript
简单谈谈关于Angular Cli打包的事
Sep 05 Javascript
React Native react-navigation 导航使用详解
Dec 01 Javascript
了解ESlint和其相关操作小结
May 21 Javascript
简化vuex的状态管理方案的方法
Jun 02 Javascript
JS判断用户用的哪个浏览器实例详解
Oct 09 Javascript
微信小程序向Java后台传输参数的方法实现
Dec 10 Javascript
微信小程序APP的生命周期及页面的生命周期
Apr 19 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
PHP5 面向对象(学习记录)
2009/12/02 PHP
Thinkphp单字母函数使用指南
2016/05/08 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
2019/01/28 PHP
JavaScript脚本性能的优化方法
2007/02/02 Javascript
innertext , insertadjacentelement , insertadjacenthtml , insertadjacenttext 等区别
2007/06/29 Javascript
js 对联广告、漂浮广告封装类(IE,FF,Opera,Safari,Chrome
2009/11/26 Javascript
Javascript学习笔记5 类和对象
2010/01/11 Javascript
纯js实现瀑布流展现照片(自动适应窗口大小)
2013/04/08 Javascript
一个支付页面DEMO附截图
2014/07/22 Javascript
使用impress.js制作幻灯片
2015/09/09 Javascript
基于Bootstrap+jQuery.validate实现表单验证
2016/05/30 Javascript
jQuery如何跳转到另一个网页 就这么简单
2016/12/28 Javascript
jquery获取select,option所有的value和text的实例
2017/03/06 Javascript
移动端刮刮乐的实现方式(js+HTML5)
2017/03/23 Javascript
three.js实现3D影院的原理的代码分析
2017/12/18 Javascript
浅谈ajax在jquery中的请求和servlet中的响应
2018/01/22 jQuery
Vue最新防抖方案(必看篇)
2019/10/30 Javascript
JS实现图片幻灯片效果代码实例
2020/05/21 Javascript
原生JS生成指定位数的验证码
2020/10/28 Javascript
python统计字符串中指定字符出现次数的方法
2015/04/04 Python
Python中max函数用于二维列表的实例
2018/04/03 Python
python list删除元素时要注意的坑点分享
2018/04/18 Python
Django Form 实时从数据库中获取数据的操作方法
2019/07/25 Python
Python模块的制作方法实例分析
2019/12/21 Python
Python利用Faiss库实现ANN近邻搜索的方法详解
2020/08/03 Python
python批量合成bilibili的m4s缓存文件为MP4格式 ver2.5
2020/12/01 Python
使用css3实现的windows8开机加载动画
2014/12/09 HTML / CSS
html5使用canvas画一条线
2014/12/15 HTML / CSS
微信html5页面调用第三方位置导航的示例
2018/03/14 HTML / CSS
Canvas中设置width与height的问题浅析
2018/11/01 HTML / CSS
Solaris操作系统的线程机制
2015/07/28 面试题
品质主管岗位职责
2014/03/16 职场文书
本科应届生自荐信
2014/06/29 职场文书
2014国庆节商场促销活动策划方案
2014/09/16 职场文书
法制工作总结2015
2015/07/23 职场文书
2015新员工工作总结范文
2015/10/15 职场文书