window.name实现的跨域数据传输

标签: window name 数据传输 | 发表时间:2014-05-22 13:58 | 作者:xuqy.happy
出处:http://www.iteye.com

有三个页面:

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

实现起来基本步骤如下:

  1. 在应用页面(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>
  2. 在应用页面(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>
  3. 获取数据以后销毁这个iframe,释放内存;这也保证了安全(不被其他域frame js访问)。
    <script type="text/javascript">
        iframe.contentWindow.document.write('');
        iframe.contentWindow.close();
        document.body.removeChild(iframe);
    </script>

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



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [window name 数据传输] 推荐:

双面玻璃窗:Twoface Window

- 无辣不欢 - 爱…稀奇~{新鲜:科技:创意:有趣}
来自设计师Junkyung Kim等人的创意,双面玻璃窗(Twoface Window),让玻璃窗绕着窗户的中轴转动开合,于是,当户外天气恶劣时,我们可以将窗户上的花盆转向室内,再不用临时搬来搬去那么麻烦了. 嗯,对园艺爱好者来说,这会是个不错的解决方案. 设计师:Junkyung Kim、Yonggu Do.

在Window平台安装MongoDB

- - BlogJava-首页技术区
本文介绍如何安装在windows 7中安装MongoDB. 注:MongoDB并不像Windows上安装其他软件,只需要下载Zip包并解压,然后配置数据存放目录并启动即可. 从MongoDB官方网站,根据你的平台选择对应的windows的压缩包并解压,本文解压到D:\mongodb\. 注:如果需要在命令行中快速使用MongoDB bin目录下的命令,可以将D:\mongoDB\bin加入到Window环境变量.

【Window 10 IoT - 1】Window 10系统安装(树莓派 Pi2) - 叶帆

- - 博客园_首页
(2)、8G 10速Micro SD卡. (3)、LCD显示器(如果是VGA接口,需要加一个HDMI转VGA模块). (5)、安装Windows 10的PC(需要物理直接安装,不能虚机机方式,本篇文章不是必须). (1)、Windows 10 IoT 树莓派固件(Windows_IoT_Core_RPI2_BUILD.zip).

Name Changer – 批量改名大杀器[Mac] | 小众软件 > Mac

- Paladin.lao - 小众软件
谷利二狗是文件名强迫症,只要一个目录超过两个文件,他就强迫症一样要给文件加上序号. 即使没有这种倾向,MP3,照片,视频,文档等等等等,让文件名包含能够体现文件特点的东西会使之便于搜索. Name Change,批量改名必备. 免费强大,可以对多个文件名进行任意字符数的前削后减、加序号、字符串搜索替换、日期排序,还支持正则表达式.

从Domain Name到QRCode谈Traffic入口思维

- - 雷锋网
像商标的价值一样,在过去的十几年里,Domain Name 一直是各类网站的最重要入口,获得一个简短好记的 dot com Domian Name,如同拥有一个金字招牌,也是网站最简单有效的方法提高用户的回访率和忠诚度. 历史上诸如 Hotels.com, Sex.com, Fund.com 等 Domain Name 转让费用均达到千万美金,而百万美金级别的 Domain Name 交易更是屡见不鲜.

window.name实现的跨域数据传输

- - Web前端 - ITeye博客
a.com/app.html:应用页面. a.com/proxy.html:代理文件,一般是一个没有任何内容的html文件,需要和应用页面在同一域下. b.com/data.html:应用页面需要获取数据的页面,可称为数据页面. 在应用页面(a.com/app.html)中创建一个iframe,把其src指向数据页面(b.com/data.html).

手机数据传输安全分析

- - FreeBuf.COM | 关注黑客与极客
如今手机已经成了我们离不开的伙伴和知己,它了解我们的日常生活. 然而每一天在路上的时候,它都会收集我们的私密信息. 平时我们会用它拍照,在社交网络中分享我们的心情;我们也用它发送邮件、短信以及拨打电话. 所以,这些信息则让我们的智能手机成为黑客眼热的宝库. 最重要的是,我们中大多数人相信手机中的数据是绝对安全的.

Flink Window基本概念与实现原理

- - SegmentFault 最新的文章
在流处理系统中数据源源不断流入到系统,我们可以逐条处理流入的数据,也可以按一定规则一次处理流中的多条数据. 当处理数据时程序需要知道什么时候开始处理、处理哪些数据. 窗口提供了这样一种依据,决定了数据何时开始处理. Flink内置Window. Flink有3个内置Window. 以事件数量驱动的Count Window.

Chameleon Window Manager – 标题栏按钮增强 | 小众软件 > 系统工具

- Choope - 小众软件
Windows 窗口右上角的三个耳熟能详的按钮是最大化/最小化/关闭. 可高级用户们对窗口管理的要求越来越多,三个按钮明显不够用. Chameleon Window Manager 为窗口栏增加更多按钮,扩展窗口管理功能. 下载(3.5MB): 官网 | 下载 | 来自小众软件. ©2011 Thruth for 小众软件 | 原文链接 | 0 留言 | 加入我们 | 投稿 | 订阅指南.

(负载均衡)Window 服务器下采用Apache2.2+JBoss7服务器集群

- - 开源软件 - ITeye博客
1.安装APCHE 2.2应用服务器 . 2.安装JBOSS 7.X. 找到APACHE安装目录. 修改 httpd.conf 文件,httpd是apache的主程序,基本对apache的配置都在这个文件里进行. a.将负载均衡需要使用的模块都打开(去掉#号即可),如下:. 继续往httpd.conf增加内容,首先增加 session sticky 设置.