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 相关文章推荐
JavaScript Object的extend是一个常用的功能
Dec 02 Javascript
jquery下异步提交表单 异步跨域提交表单
Nov 17 Javascript
关于 文本框默认值 的操作js代码
Jan 12 Javascript
javascript 使td内容不换行不撑开
Nov 29 Javascript
node.js中的fs.readdir方法使用说明
Dec 17 Javascript
javascript组合使用构造函数模式和原型模式实例
Jun 04 Javascript
JavaScript常用函数工具集:lao-utils
Mar 01 Javascript
Bootstrap菜单按钮及导航实例解析
Sep 09 Javascript
jQuery Ajax传值到Servlet出现乱码问题的解决方法
Oct 09 Javascript
jQuery实现select下拉框获取当前选中文本、值、索引
May 08 jQuery
JavaScript实现开关等效果
Sep 08 Javascript
详解基于Node.js的HTTP/2 Server实践
May 31 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
德劲1102收音机的打理维修案例
2021/03/02 无线电
php 根据url自动生成缩略图并处理高并发问题
2014/01/23 PHP
PHP开发框架Laravel数据库操作方法总结
2014/09/03 PHP
利用PHP脚本在Linux下用md5函数加密字符串的方法
2015/06/29 PHP
php使用CURL模拟GET与POST向微信接口提交及获取数据的方法
2016/09/23 PHP
yii2项目实战之restful api授权验证详解
2017/05/20 PHP
PHP配置ZendOpcache插件加速
2019/02/14 PHP
禁止直接访问php文件代码分享
2020/05/05 PHP
SyntaxHighlighter 3.0.83使用笔记
2015/01/26 Javascript
JavaScript里四舍五入函数round用法实例
2015/04/06 Javascript
jQuery插件Zclip实现完美兼容个浏览器点击复制内容到剪贴板
2015/04/30 Javascript
jQuery Validate验证框架经典大全
2015/09/23 Javascript
JS从数组中随机取出几个数组元素的方法
2016/08/02 Javascript
vue实现组件之间传值功能示例
2018/07/13 Javascript
webpack4 入门最简单的例子介绍
2018/09/05 Javascript
微信小程序上传图片到php服务器的方法
2019/05/23 Javascript
jquery轮播图插件使用方法详解
2020/07/31 jQuery
使用Windows批处理和WMI设置Python的环境变量方法
2019/08/14 Python
python爬虫 批量下载zabbix文档代码实例
2019/08/21 Python
Python3批量移动指定文件到指定文件夹方法示例
2019/09/02 Python
详解Python Celery和RabbitMQ实战教程
2021/01/20 Python
CSS3 display知识详解
2015/11/25 HTML / CSS
使用HTML5 Canvas API绘制弧线的教程
2016/03/22 HTML / CSS
您在慕尼黑的跑步商店:Lauf-bar
2019/10/11 全球购物
俄罗斯一家时尚女装商店:Charuel
2019/12/04 全球购物
linux面试相关问题
2012/08/11 面试题
班组长安全生产职责
2013/12/16 职场文书
财务主管岗位职责
2014/02/28 职场文书
敬老院活动总结
2014/04/28 职场文书
大学生学习计划书
2014/09/15 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书
五星级酒店前台接待岗位职责
2015/04/02 职场文书
二审代理词范文
2015/05/25 职场文书
2015年圣诞节寄语
2015/08/17 职场文书
详细分析PHP7与PHP5区别
2021/06/26 PHP
Windows 11上手初体验:任务栏和开始菜单等迎来大改
2021/11/21 数码科技