数据跨域传递的方法及装置的制作方法

文档序号:6364401阅读:136来源:国知局
专利名称:数据跨域传递的方法及装置的制作方法
技术领域
本发明涉及网页间数据获取的技术领域,尤其涉及一种数据跨域传递的方法及装置。
背景技术
出于安全方面考虑,Netscape Communications公司提出了浏览器的同源策略,浏览器的同源策略是阻止从一个源加载的文档或脚本访问另一个源加载的文档的属性。目前支持JavaScript的浏览器普遍都使用了这种策略,但加强安全的代价便是牺牲了不同源的数据之间传递(即跨域传递)的便捷性。目前,主要通过以下方式实现跨域传递:(1)使用 document, domain 实现:以 WWW.domain 1.com/ index, htm 和 a.domain 1.com/ index, htm 为例,如果分别在两个页面修改其document的domain属性值为“domainl.com”,那么支持同源策略的浏览器会认为两个页面属于同源,两个页面就可以互相访问对方的对象了。由于页面的document,domain只能设置为当前域名或当前域名的父域名,所只能使用于父域名相同但子域名不同的情况。(2)使用动态加载的脚本实现(典型应用为JSONP (JavaScript ObjectNotationwith Padding,基于JSON数据格式实现跨域访问的解决方案)):以 www.domainl.com/service.aspx jsonp = cbFunction(页面一)和WWW.domain2.com/index, htm (页面二)为例,调用方法为在页面二用脚本动态加载src (source,源)属性为页面一的脚本页面,其中“cbFunction”为获取JSON数据后的回调函数名。通过动态加载的脚本实现跨域传递,只要访问页面一即可获取数据,所以不能传递任何重要或秘密的数据。(3)使用 location, hash 实现:其基本原理是子页面通过改变parent, location, hash的值来传递数据给父页面的统一资源定位符(UniformResourceLocator, URL),那么父页面就可以通过location.hash来获取这些数据了。由于hash是不受同源策略限制的,所以能在不同域之间传递数据。但是,这种方案因为受到浏览器URL的长度限制而不能传递大量数据。(4)使用 flash 实现:由于flash自身有可定制的安全策略,所以其跨域功能是比较强大且能满足普遍需求的,其唯一的不足是需要浏览器支持flash插件,无法满足不能装flash插件的客户端的跨域传递需求。综上所述,现有的实现跨域传递的方法,不是存在只能在父域名相同的页面间传递数据的问题,就是存在安全性不强的问题,或者存在传递的数据量受URL长度限制的影响的问题,又或者存在需要浏览器额外安装插件的问题。

发明内容
本发明实施例提供一种数据跨域传递的方法,实现了大数据的跨域传递。为达到上述目的,本发明实施例采用如下技术方案:一方面,提供数据跨域传递的方法,包括:在第一页面中以子页面iframe标签的形式加载第二页面,将第二页面的数据存入所述子页面的名称属性window, name中;加载完毕后,所述子页面跳转至代理页面,所述代理页面与所述第一页面同源;所述第一页面通过所述代理页面的window, name获取所述第二页面的数据。对应于上述方法,还提供一种数据跨域传递的装置,包括:执行单元,用于在第一页面中以子页面iframe标签的形式加载第二页面,将第二页面的数据存入所述子页面的名称属性window, name中;跳转单元,用于所述执行单元加载完毕后,所述子页面跳转至代理页面,所述代理页面与所述第一页面同源;获取单元,用于所述第一页面通过所述代理页面的window, name获取所述第二页面的数据。本发明实施例提供的数据跨域传递的方法及装置,将第二页面的数据存储到iframe的window, name中,然后将iframe跳转至与第一页面同源的代理页面,由于iframe中的URL无论如何变化,window, name都会存在且不会变化,在iframe跳转至与第一页面同源的代理页面后,所述第一页面可以通过所述代理页面的window, name获取所述第二页面的数据,不需要用户在浏览器上安装任何额外的插件,此外,window, name可以存储至少2M字节的数据实现了大数据的跨域传递。该方法中对于第一页面第二页面之间的父域名是都相同并不做限定,且由于通过第一页面主动选择要交换的数据对象而非第二页面对所有来源的页面公开数据,保证了传递的安全性。解决了现有技术实现跨域传递的方法,不是存在只能在父域名相同的页面间传递数据的问题,就是存在安全性不强的问题,或者存在传递的数据量受URL长度限制的影响的问题,又或者存在需要浏览器额外安装插件的问题。


为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。图1为本发明实施例一提供的数据跨域传递的方法流程图一;图2为本发明实施例一提供的数据跨域传递的方法流程图二 ;如3为本发明实施例二提供的数据跨域传递的方法流程图;图4为本发明实施例三提供的数据跨域传递的装置的结构示意图一;图5为图4所示的数据跨域传递的装置中执行单元的结构示意图;图6为图4所示的数据跨域传递的装置中获取单元的结构示意图;图7为本发明实施例三提供的数据跨域传递的装置的结构示意图二。
具体实施例方式以下描述中 ,为了说明而不是为了限定,提出了诸如特定装置结构、技术之类的具体细节,以便透切理解本发明。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本发明。在其它情况中,省略对众所周知的装置、电路以及方法的详细说明,以免不必要的细节妨碍本发明的描述。本发明实施例提供一种数据跨域传递的方法及装置,实现了大数据的跨域传递。实施例一如图1所示,本发明实施例提供的一种数据跨域传递的方法,包括:101、在第一页面中以子页面iframe标签的形式加载第二页面,将第二页面的数据存入所述子页面的名称属性window, name中。其中,所述在第一页面中以子页面iframe标签的形式加载第二页面,具体为:在所述第一页面中创建iframe, iframe 的src属性值为第二页面的地址,通过所述iframe加载所述第二页面。值得说明的是,在加载第二页面的过程中,所述第二页面包含有脚本,其中脚本中存在以下动作:将第二页面的数据存储到iframe的window, name中的动作。102、加载完毕后,所述子页面跳转至代理页面,所述代理页面与所述第一页面同源。其中,所述子页面跳转至代理页面的可以通过以下方式实现:修改iframe中的window, location, href值,将其修改为与第一页面同源的地址,以形成代理页面,举例说明,如第一页面的域名为WWW.domainl.com/index, htm, iframe在加载第二页面后,将window, location, href 值修改为 www.domainl.com/proxy, htm,形成代理页面,那么代理
页面与第一页面同源。103、所述第一页面通过所述代理页面的window, name获取所述第二页面的数据。其中,所述通过所述代理页面的window, name获取所述第二页面的数据,可以通过以下方式实现:在所述子页面跳转至代理页面后,获取所述代理页面的window, name,所述window, name存储有所述第二页面的数据;将所述第二页面的数据以回调函数的参数形式传递给所述第一页面;所述第一页面在所述回调函数中处理所述第二页面的数据。进一步的,如图2所示,所述第一页面通过所述代理页面的window, name获取所述第二页面的数据之后,还可以包括:104、在所述第一页面接收到修改指令时,根据所述修改指令对所述第二页面的数据进行修改。值得说明的是,在本实施例中,所述子页面在所述第一页面中不可见。所述代理页面在所述第一页面中不可见。本发明实施例提供的数据跨域传递的方法,将第二页面的数据存储到iframe的window, name中,然后将iframe跳转至与第一页面同源的代理页面,由于iframe中的URL无论如何变化,window, name都会存在且不会变化,在iframe跳转至与第一页面同源的代理页面后,所述第一页面可以通过所述代理页面的window, name获取所述第二页面的数据,不需要用户在浏览器上安装任何额外的插件,此外,window, name可以存储至少2M字节的数据实现了大数据的跨域传递。该方法中对于第一页面第二页面之间的父域名是都相同并不做限定,且由于通过第一页面主动选择要交换的数据对象而非第二页面对所有来源的页面公开数据,保证了传递的安全性。解决了现有技术实现跨域传递的方法,不是存在只能在父域名相同的页面间传递数据的问题,就是存在安全性不强的问题,或者存在传递的数据量受URL长度限制的影响的问题,又或者存在需要浏览器额外安装插件的问题。实施例二为了使得本领域技术人员更好的理解本发明实施例提供的数据跨域传递的方法,现对该方法进行详细的说明。window, name的特点使其非常适合用于跨域传递大数据,首先在当前标签下,无论页面或子页面的URL如何变化,window, name都会存在,且存储在浏览器中,不会增加HTTP请求数。其次,目前支持JavaScript的浏览器中,window, name可以存储至少2兆字节的数据(Mozilla Firefox、IE9、Google Chrome中可以存储32兆字节或更多)。另外,它也不需要用户在浏览器上安装任何额外的插件。window, name跨域传递数据的基本原理是页面中子页面iframe在加载页面时,window, name的值是会持久存在的,因此iframe由外域重定向到本域时,可以将外域的数据通过子页面的window, name中转,传递至本域的回调函数。现以第一页面(www.domainl.com/index, htm)和第二页面(www.domain2.com/cg1-bin/data)为例进行详细的说明。如图3所示,本发明实施例提供一种数据跨域的方法,包括:301、第一 页面在需要第二页面的数据时,动态加载一个iframe标签,其src属性值为第二页面的地址。例如,个人主页上设置有一个进入个人微博的按钮标签,在浏览该个人主页的用户需要查看个人微博的内容时,可以点击该进入个人微博的标签,从而触发个人主页对个人微博的数据需求,个人主页会动态加载一个iframe标签,该iframe标签的src为个人微博的地址。由于第一页面主动选择需要交换的数据的对象,而不像JSONP那样第二页面对所有来源的页面公开数据,本实施例中第二页面只将数据授予指定来源的页面,保证了传递的安全性。302、iframe加载第二页面,根据第二页面中的脚本将所述第二页面的数据存储到所述 iframe 的 window, name 中。例如,所述第二页面的脚本为:set:window.name = data。303、加载完毕后,将 iframe 的 window, location, href 值修改为 www.domainl.com/proxy, htm,实现代理页面的跳转,所述代理页面与所述第一页面同源。304、在所述子页面跳转至代理页面后,通过get函数获取所述代理页面的window, name,所述window, name存储有所述第二页面的数据;具体的,所述get函数可以为temp = window.name。305、将所述第二页面的数据以回调函数的参数形式传递给所述第一页面,所述第一页面在所述回调函数中处理所述第二页面的数据。具体的,所述回调函数可以为parent.cbFun(temp)。306、在所述第一页面接收到修改指令时,根据所述修改指令对所述第二页面的数据进行修改。本发明实施例提供的数据跨域传递的方法,将第二页面的数据存储到iframe的window, name中,然后将iframe跳转至与第一页面同源的代理页面,由于iframe中的URL无论如何变化,window, name都会存在且不会变化,在iframe跳转至与第一页面同源的代理页面后,所述第一页面可以通过所述代理页面的window, name获取所述第二页面的数据,不需要用户在浏览器上安装任何额外的插件,此外,window, name可以存储至少2M字节的数据实现了大数据的跨域传递。该方法中对于第一页面第二页面之间的父域名是都相同并不做限定,且由于通过第一页面主动选择要交换的数据对象而非第二页面对所有来源的页面公开数据,保证了传递的安全性。解决了现有技术实现跨域传递的方法,不是存在只能在父域名相同的页面间传递数据的问题,就是存在安全性不强的问题,或者存在传递的数据量受URL长度限制的影响的问题,又或者存在需要浏览器额外安装插件的问题。实施例三如图4所示,本发明实施例提供的一种数据跨域传递的装置,包括:执行单元41, 用于在第一页面中以子页面iframe标签的形式加载第二页面,将第二页面的数据存入所述子页面的名称属性window, name中;在本实施例中,如图5所示,所述执行单元,包括:创建子单元411,用于在所述第一页面中创建子页面iframe,所述子页面的源src属性值为第二页面的地址;加载子单元412,用于通过所述子页面加载第二页面,根据所述第二页面中的脚本,将所述第二页面的数据存入所述子页面的window, name中。跳转单元42,用于所述执行单元加载完毕后,所述子页面跳转至代理页面,所述代理页面与所述第一页面同源;获取单元43,用于所述第一页面通过所述代理页面的window, name获取所述第二页面的数据。在本实施例中,如图6所示,所述获取单元,包括:获取子单元431,用于在所述子页面跳转至代理页面后,获取所述代理页面的window, name,所述window, name存储有所述第二页面的数据;传递子单元432,用于将所述获取子单元获取的第二页面的数据以回调函数的参数形式传递给所述第一页面;处理子单元433,用于所述第一页面在所述回调函数中处理所述第二页面的数据。进一步的,如图7所示,所述装置,还包括:修改单元44,用于在所述第一页面接收到修改指令时,根据所述修改指令对所述第二页面的数据进行修改。本发明实施例提供的数据跨域传递的装置,将第二页面的数据存储到iframe的window, name中,然后将iframe跳转至与第一页面同源的代理页面,由于iframe中的URL无论如何变化,window, name都会存在且不会变化,在iframe跳转至与第一页面同源的代理页面后,所述第一页面可以通过所述代理页面的window, name获取所述第二页面的数据,不需要用户在浏览器上安装任何额外的插件,此外,window, name可以存储至少2M字节的数据实现了大数据的跨域传递。该方法中对于第一页面第二页面之间的父域名是都相同并不做限定,且由于通过第一页面主动选择要交换的数据对象而非第二页面对所有来源的页面公开数据,保证了传递的安全性。解决了现有技术实现跨域传递的方法,不是存在只能在父域名相同的页面间传递数据的问题,就是存在安全性不强的问题,或者存在传递的数据量受URL长度限制的影响的问题,又或者存在需要浏览器额外安装插件的问题。本发明实施例提供的数据跨域传递的方法及装置可以应用在网页之间的跨域传递中。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,设备和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。本领域技术人员可以意识到,结合本文中所公开的实施例中描述的各方法步骤和单元,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各实施例的步骤及组成。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。本领域技术人员可以对每个特定的应用使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案 的本质脱离本发明各实施例技术方案的原理和范围。
权利要求
1.一种数据跨域传递的方法,其特征在于,包括: 在第一页面中以子页面iframe标签的形式加载第二页面,将第二页面的数据存入所述子页面的名称属性window, name中; 加载完毕后,所述子页面跳转至代理页面,所述代理页面与所述第一页面同源; 所述第一页面通过所述代理页面的window, name获取所述第二页面的数据。
2.根据权利要求1所述的方法,其特征在于,所述在第一页面中以子页面iframe标签的形式加载第二页面,将第二页面的数据存入所述子页面的名称属性window, name中,包括: 在所述第一页面中创建子页面iframe,所述子页面的源src属性值为第二页面的地址; 通过所述子页面加载所述第二页面,根据所述第二页面中的脚本,将所述第二页面的数据存入所述子页面的window, name中。
3.根据权利要求1所述的方法,其特征在于,所述第一页面通过所述代理页面的window, name获取所述第二页面的数据,包括: 在所述子页面跳转至代理页面后,获取所述代理页面的window, name,所述window,name存储有所述第二页面的数据; 将所述第二页面的数据以回调函数的参数形式传递给所述第一页面; 所述第一页面在所述回调函数中处理所述第二页面的数据。`
4.根据权利要求1-3任一项所述的方法,其特征在于,所述第一页面通过所述代理页面的window, name获取所述第二页面的数据之后,还包括: 在所述第一页面接收到修改指令时,根据所述修改指令对所述第二页面的数据进行修改。
5.根据权利要求1-3任一项所述的方法,其特征在于,所述子页面在所述第一页面中不可见。
6.根据权利要求1-3任一项所述的方法,其特征在于,所述代理页面在所述第一页面中不可见。
7.一种数据跨域传递的装置,其特征在于,包括: 执行单元,用于在第一页面中以子页面iframe标签的形式加载第二页面,将第二页面的数据存入所述子页面的名称属性window, name中; 跳转单元,用于所述执行单元加载完毕后,所述子页面跳转至代理页面,所述代理页面与所述第一页面同源; 获取单元,用于所述第一页面通过所述代理页面的window, name获取所述第二页面的数据。
8.根据权利要求7所述装置,其特征在于,所述执行单元,包括: 创建子单元,用于在所述第一页面中创建子页面iframe,所述子页面的源src属性值为第二页面的地址; 加载子单元,用于通过所述子页面加载第二页面,根据所述第二页面中的脚本,将所述第二页面的数据存入所述子页面的window, name中。
9.根据权利要求7所述的装置,其特征在于,获取单元,包括:获取子单元,用于在所述子页面跳转至代理页面后,获取所述代理页面的window,name,所述window, name存储有所述第二页面的数据; 传递子单元,用于将所述获取子单元获取的第二页面的数据以回调函数的参数形式传递给所述第一页面; 处理子单元,用于所述第一页面在所述回调函数中处理所述第二页面的数据。
10.根据权利要求7-9任一项所述的装置,其特征在于,还包括: 修改单元,用于在所述第一页面接收到修改指令时,根据所述修改指令对所述第二页面的数据进行 修改。
全文摘要
本发明公开了一种数据跨域传递的方法及装置,涉及网页间数据获取的技术领域,实现了大数据的跨域传递。本发明实施例提供一种数据跨域传递的方法,包括在第一页面中以子页面iframe标签的形式加载第二页面,将第二页面的数据存入所述子页面的名称属性window.name中;加载完毕后,所述子页面跳转至代理页面,所述代理页面与所述第一页面同源;所述第一页面通过所述代理页面的window.name获取所述第二页面的数据。本发明实施例提供的数据跨域传递的方法及装置可以应用在网页之间的跨域传递中。
文档编号G06F17/30GK103246667SQ20121002747
公开日2013年8月14日 申请日期2012年2月8日 优先权日2012年2月8日
发明者操龙敏, 于树南, 郑旭泽, 方应杭, 龙丁奋, 郭学亨, 朱磊 申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1