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 相关文章推荐
给moz-firefox下添加IE方法和属性
Apr 10 Javascript
DOM节点的替换或修改函数replaceChild()用法实例
Jan 12 Javascript
jQuery简单实现日历的方法
May 04 Javascript
原生javascript实现解析XML文档与字符串
Mar 01 Javascript
JS实现根据文件字节数返回文件大小的方法
Aug 02 Javascript
jQuery弹出div层过2秒自动消失
Nov 29 Javascript
Easyui和zTree两种方式分别实现树形下拉框
Aug 04 Javascript
Vue 组件传值几种常用方法【总结】
May 28 Javascript
Vue cli3 库模式搭建组件库并发布到 npm的流程
Oct 12 Javascript
使用vue完成微信公众号网页小记(推荐)
Apr 28 Javascript
OpenLayers加载缩放控件使用方法详解
Sep 25 Javascript
vue实现列表拖拽排序的功能
Nov 02 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 5.0对象模型深度探索之对象复制
2008/03/27 PHP
dedecms中使用php语句指南
2014/11/13 PHP
PHP借助phpmailer发送邮件
2015/05/11 PHP
php版微信公众号自定义分享内容实现方法
2016/09/22 PHP
Span元素的width属性无效果原因及解决方案
2010/01/15 Javascript
利用jQuery 实现GridView异步排序、分页的代码
2010/02/06 Javascript
Jquery进度条插件 Progress Bar小问题解决
2011/07/12 Javascript
Javascript 遍历页面text控件详解
2014/01/06 Javascript
JavaScript代码应该放在HTML代码哪个位置比较好?
2014/10/16 Javascript
实例分析js和C#中使用正则表达式匹配a标签
2014/11/26 Javascript
jQuery on()方法示例及jquery on()方法的优点
2015/08/27 Javascript
理解javascript中的MVC模式
2016/01/28 Javascript
JS版微信6.0分享接口用法分析
2016/10/13 Javascript
jQuery Ajax 实现在html页面实时显示用户登录状态
2016/12/30 Javascript
JavaScript中in和hasOwnProperty区别详解
2017/08/04 Javascript
js隐式转换的知识实例讲解
2018/09/28 Javascript
详解vue如何使用rules对表单字段进行校验
2018/10/17 Javascript
小程序封装路由文件和路由方法(5种全解析)
2019/05/26 Javascript
vue实现购物车小案例
2019/09/27 Javascript
详解node.js 事件循环
2020/07/22 Javascript
AJAX XMLHttpRequest对象创建使用详解
2020/08/20 Javascript
[01:19:33]DOTA2-DPC中国联赛 正赛 iG vs VG BO3 第一场 2月2日
2021/03/11 DOTA
python 字典(dict)遍历的四种方法性能测试报告
2014/06/25 Python
用Python编写分析Python程序性能的工具的教程
2015/04/01 Python
python制作企业邮箱的爆破脚本
2016/10/05 Python
详解Python读取配置文件模块ConfigParser
2017/05/11 Python
Python读csv文件去掉一列后再写入新的文件实例
2017/12/28 Python
python 实现读取一个excel多个sheet表并合并的方法
2019/02/12 Python
Django保护敏感信息的方法示例
2019/05/09 Python
Python学习笔记之While循环用法分析
2019/08/14 Python
matplotlib基础绘图命令之errorbar的使用
2020/08/13 Python
仓库班组长岗位职责
2013/12/12 职场文书
2014全国两会学习心得体会2000字
2014/03/10 职场文书
校园歌咏比赛主持词
2014/03/18 职场文书
面试通知邮件
2015/04/20 职场文书
Redis 哨兵集群的实现
2021/06/18 Redis