javascript跨域总结之window.name实现的跨域数据传输


Posted in Javascript onNovember 01, 2015

自己实践了一下,真的很好用。特将具体实现方法记录如下

有三个页面:

    a.com/app.html:应用页面。
    a.com/proxy.html:代理文件,一般是一个没有任何内容的html文件,需要和应用页面在同一域下。
    b.com/data.html:应用页面需要获取数据的页面,可称为数据页面。

实现起来基本步骤如下:

    在应用页面(a.com/app.html)中创建一个iframe,把其src指向数据页面(b.com/data.html)。
    数据页面会把数据附加到这个iframe的window.name上,data.html代码如下:

<script type="text/javascript">
    window.name = 'I was there!';  // 这里是要传输的数据,大小一般为2M,IE和firefox下可以大至32M左右
                     // 数据格式可以自定义,如json、字符串
  </script>

    在应用页面(a.com/app.html)中监听iframe的onload事件,在此事件中设置这个iframe的src指向本地域的代理文件(代理文件和应用页面在同一域下,所以可以相互通信)。app.html部分代码如下:

<script type="text/javascript">
    var state = 0, 
    iframe = document.createElement('iframe'),
    loadfn = function() {
      if (state === 1) {
        var data = iframe.contentWindow.name;  // 读取数据
        alert(data);  //弹出'I was there!'
      } else if (state === 0) {
        state = 1;
        iframe.contentWindow.location = "http://a.com/proxy.html";  // 设置的代理文件
      } 
    };
    iframe.src = 'http://b.com/data.html';
    if (iframe.attachEvent) {
      iframe.attachEvent('onload', loadfn);
    } else {
      iframe.onload = loadfn;
    }
    document.body.appendChild(iframe);
  </script>

    获取数据以后销毁这个iframe,释放内存;这也保证了安全(不被其他域frame js访问)。

<script type="text/javascript">
    iframe.contentWindow.document.write('');
    iframe.contentWindow.close();
    document.body.removeChild(iframe);
  </script>

总结起来即:iframe的src属性由外域转向本地域,跨域数据即由iframe的window.name从外域传递到本地域。这个就巧妙地绕过了浏览器的跨域访问限制,但同时它又是安全操作。

Javascript 相关文章推荐
juqery 学习之六 CSS--css、位置、宽高
Feb 11 Javascript
JavaScript中使用构造器创建对象无需new的情况说明
Mar 01 Javascript
js实现简单鼠标跟随效果的方法
Apr 10 Javascript
Backbone.js框架中简单的View视图编写学习笔记
Feb 14 Javascript
JavaScript基础重点(必看)
Jul 09 Javascript
JS实现表单验证功能(验证手机号是否存在,验证码倒计时)
Oct 11 Javascript
js放到head中失效的原因与解决方法
Mar 07 Javascript
简单实现vue验证码60秒倒计时功能
Oct 11 Javascript
js实现贪吃蛇小游戏
Oct 29 Javascript
JS实现滑动导航效果
Jan 14 Javascript
记一次vue跨域的解决
Oct 21 Javascript
解决vscode进行vue格式化,会自动补分号和双引号的问题
Oct 26 Javascript
《JavaScript高级编程》学习笔记之object和array引用类型
Nov 01 #Javascript
JS实现的论坛Ajax打分效果完整实例
Oct 31 #Javascript
JS实现来回出现文字的状态栏特效代码
Oct 31 #Javascript
JS实现的3D拖拽翻页效果代码
Oct 31 #Javascript
JS实现模拟百度搜索“2012世界末日”网页地震撕裂效果代码
Oct 31 #Javascript
JS实现的简单鼠标跟随DiV层效果完整实例
Oct 31 #Javascript
js实现点击获取验证码倒计时效果
Jan 28 #Javascript
You might like
php+xml结合Ajax实现点赞功能完整实例
2015/01/30 PHP
Laravel中注册Facades的步骤详解
2016/03/16 PHP
ThinkPHP发送邮件示例代码
2016/10/08 PHP
jquery绑定原理 简单解析与实现代码分享
2011/09/06 Javascript
js使用心得分享
2015/01/13 Javascript
JavaScript实现的经典文件树菜单效果
2015/09/08 Javascript
详解微信小程序开发之——wx.showToast(OBJECT)的使用
2017/01/18 Javascript
基于js中document.cookie全面解析
2017/09/14 Javascript
vue组件之Alert的实现代码
2017/10/17 Javascript
使用百度地图实现地图网格的示例
2018/02/06 Javascript
深入Vue-Router路由嵌套理解
2018/08/13 Javascript
vue.js实现会动的简历(包含底部导航功能,编辑功能)
2019/04/08 Javascript
js实现自定义滚动条的示例
2020/10/27 Javascript
Django静态资源URL STATIC_ROOT的配置方法
2014/11/08 Python
浅谈python的深浅拷贝以及fromkeys的用法
2019/03/08 Python
python爬虫简单的添加代理进行访问的实现代码
2019/04/04 Python
keras 获取某层输出 获取复用层的多次输出实例
2020/05/23 Python
如何基于Python和Flask编写Prometheus监控
2020/11/25 Python
为2021年的第一场雪锦上添花:用matplotlib绘制雪花和雪景
2021/01/05 Python
发现两个有趣的CSS3动画效果
2013/08/14 HTML / CSS
HTML5去掉输入框type为number时的上下箭头的实现方法
2020/01/03 HTML / CSS
浅谈Html5页面打开app的一些思考
2020/03/30 HTML / CSS
Lookfantastic香港官网:英国知名美妆购物网站
2018/06/19 全球购物
FC-Moto美国:欧洲最大的摩托车服装和头盔商店之一
2019/08/24 全球购物
英国男女豪华配饰和礼品网站:Black.co.uk
2020/02/28 全球购物
初中生个人学习的自我评价
2013/12/04 职场文书
就业自荐书
2013/12/05 职场文书
护士演讲稿范文
2014/01/05 职场文书
总经理岗位职责范本
2014/02/02 职场文书
董事长秘书工作职责
2014/06/10 职场文书
项目申请汇报材料
2014/08/16 职场文书
普通党员群众路线教育实践活动心得体会
2014/11/04 职场文书
Feign调用全局异常处理解决方案
2021/06/24 Java/Android
React Fragment介绍与使用详解
2021/11/11 Javascript
Python装饰器详细介绍
2022/03/25 Python
Python开发简易五子棋小游戏
2022/05/02 Python