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中暂停功能的实现代码
Mar 04 Javascript
JS Array对象入门分析
Oct 30 Javascript
精心挑选的15个jQuery下拉菜单制作教程
Jun 15 Javascript
jQuery制作仿腾讯web qq用户体验桌面
Aug 20 Javascript
Json序列化和反序列化方法解析
Dec 19 Javascript
JavaScript格式化日期时间的方法和自定义格式化函数示例
Apr 04 Javascript
JavaScript数值转换的三种方式总结
Jul 31 Javascript
jquery表单提交带错误信息提示效果
Mar 09 Javascript
JavaScript代码判断输入的字符串是否含有特殊字符和表情代码实例
Aug 17 Javascript
vue下跨域设置的相关介绍
Aug 26 Javascript
vue中component组件的props使用详解
Sep 04 Javascript
vue-cli下的vuex的简单Demo图解(实现加1减1操作)
Feb 26 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获取远程图片并把它保存到本地的代码
2008/04/07 PHP
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
2014/05/10 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
jQuery UI-Draggable 参数集合
2010/01/10 Javascript
你需要知道的10个最佳javascript开发实践小结
2012/04/15 Javascript
使用Post提交时须将空格转换成加号的解释
2013/01/14 Javascript
将中国标准时间转换成标准格式的代码
2014/03/20 Javascript
每天一篇javascript学习小结(Array数组)
2015/11/11 Javascript
js判断iframe中元素是否存在的实现代码
2016/12/24 Javascript
jQuery中hover方法搭配css的hover选择器,实现选中元素突出显示方法
2017/05/08 jQuery
将input框中输入内容显示在相应的div中【三种方法可选】
2017/05/08 Javascript
Angular2监听页面大小变化的解决方法
2017/10/09 Javascript
JavaScript实现短暂提示框功能
2018/04/04 Javascript
vue中子组件传递数据给父组件的讲解
2019/01/27 Javascript
基于js实现数组相邻元素上移下移
2020/05/19 Javascript
如何编写一个 Webpack Loader的实现
2020/10/18 Javascript
[42:22]DOTA2上海特级锦标赛C组小组赛#1 OG VS Archon第一局
2016/02/27 DOTA
[39:21]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.24
2019/09/10 DOTA
Cython 三分钟入门教程
2009/09/17 Python
python获取当前计算机cpu数量的方法
2015/04/18 Python
mysql 之通过配置文件链接数据库
2017/08/12 Python
今天 平安夜 Python 送你一顶圣诞帽 @微信官方
2017/12/25 Python
python ddt实现数据驱动
2018/03/14 Python
python中实现数组和列表读取一列的方法
2018/04/03 Python
Python实现字典(dict)的迭代操作示例
2018/06/05 Python
利用python打开摄像头及颜色检测方法
2018/08/03 Python
使用python Telnet远程登录执行程序的方法
2019/01/26 Python
Pytest参数化parametrize使用代码实例
2020/02/22 Python
Django+python服务器部署与环境部署教程详解
2020/03/30 Python
win10下python3.8的PIL库安装过程
2020/06/08 Python
详解Pytorch显存动态分配规律探索
2020/11/17 Python
婴儿鞋,独特的婴儿服装和配件:Zutano
2018/11/03 全球购物
应届生求职信范文
2014/05/26 职场文书
市级青年文明号申报材料
2014/05/26 职场文书
前端canvas中物体边框和控制点的实现示例
2022/08/05 Javascript
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
2023/05/08 MySQL