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 相关文章推荐
70+漂亮且极具亲和力的导航菜单设计国外网站推荐
Sep 20 Javascript
JavaScript Serializer序列化时间处理示例
Jul 31 Javascript
用js动态添加html元素,以及属性的简单实例
Jul 19 Javascript
微信小程序 时间格式化(util.formatTime(new Date))详解
Nov 16 Javascript
简单谈谈require模块化jquery和angular的问题
Jun 23 jQuery
JS实现的文件拖拽上传功能示例
May 21 Javascript
jQuery+vue.js实现的多选下拉列表功能示例
Jan 15 jQuery
浅谈JavaScript闭包
Apr 09 Javascript
送你43道JS面试题(收藏)
Jun 17 Javascript
基于Vue的商品主图放大镜方案详解
Sep 19 Javascript
vue中js判断长时间不操作界面自动退出登录(推荐)
Jan 22 Javascript
VSCode 配置uni-app的方法
Jul 11 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截取IE浏览器并缩小原图的方法
2016/03/04 PHP
PHP获取数组中单列值的方法
2017/06/10 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
2019/10/08 PHP
PHP 实现 WebSocket 协议原理与应用详解
2020/04/22 PHP
Code: write(s,d) 输出连续字符串
2007/08/19 Javascript
多个表单中如何获得这个文件上传的网址实现js代码
2013/03/25 Javascript
浅析JavaScript中的CSS属性及命名规范
2013/11/28 Javascript
一个html5播放视频的video控件只支持android的默认格式mp4和3gp
2014/05/08 Javascript
Ionic如何实现下拉刷新与上拉加载功能
2016/06/03 Javascript
解决jQuery ajax请求在IE6中莫名中断的问题
2016/06/20 Javascript
vue实现与安卓、IOS交互的方法
2018/11/02 Javascript
[58:59]完美世界DOTA2联赛PWL S3 access vs CPG 第一场 12.13
2020/12/16 DOTA
Python中zip()函数用法实例教程
2014/07/31 Python
一个超级简单的python web程序
2014/09/11 Python
Python是编译运行的验证方法
2015/01/30 Python
Python中的hypot()方法使用简介
2015/05/18 Python
python最小生成树kruskal与prim算法详解
2019/01/17 Python
Python下简易的单例模式详解
2019/04/08 Python
Django实现文件上传下载
2019/10/06 Python
Python如何使用BeautifulSoup爬取网页信息
2019/11/26 Python
python opencv实现信用卡的数字识别
2020/01/12 Python
使用PyTorch实现MNIST手写体识别代码
2020/01/18 Python
TensorFlow学习之分布式的TensorFlow运行环境
2020/02/05 Python
CSS3 分类菜单效果
2019/05/27 HTML / CSS
SmartBuyGlasses德国:购买太阳镜和眼镜
2019/08/20 全球购物
工厂厂长岗位职责
2013/11/08 职场文书
汽车维修专业个人求职信范文
2014/01/01 职场文书
物流专业求职计划书
2014/01/10 职场文书
小学师德标兵先进事迹材料
2014/05/25 职场文书
今冬明春火灾防控工作方案
2014/05/29 职场文书
2015年女生节活动总结
2015/02/27 职场文书
2016年基层党支部书记公开承诺书
2016/03/25 职场文书
商业计划书格式、范文
2019/03/21 职场文书
python 经纬度求两点距离、三点面积操作
2021/06/03 Python
一文彻底理解js原生语法prototype,__proto__和constructor
2021/10/24 Javascript
「回转企鹅罐」10周年纪念展「輪るピングドラム展」海报公开
2022/03/22 日漫