码迷,mamicode.com
首页 > Windows程序 > 详细

window.name跨域实现

时间:2015-12-15 18:06:05      阅读:290      评论:0      收藏:0      [点我收藏+]

标签:

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

有三个页面:

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

原理: a.com/app.html 中通过javascript创建iframe,并将location指向b.com/data.html,

    并监听iframe的dom onload,

    加载完毕后修改location指向a.com/proxy.html

实现步骤:

  1. a.com/app.html 的head元素中一段javascript代码

  <script type="text/javascript">
   window.onload = function(){
    var state = 0,
    iframe = document.createElement(‘iframe‘),
    iframe.src = ‘b.com/data.html‘; // 这里会触发onload事件

    loadfn = function() {
     if (state == 1) {
        var data = iframe.contentWindow.name;    // 读取数据
        alert(data);    //弹出 ‘xxxxx‘
     // 获取数据以后销毁这个iframe,释放内存;这也保证了安全(不被其他域frame js访问)。
        iframe.contentWindow.document.write(‘‘);
        iframe.contentWindow.close();
        document.body.removeChild(iframe);
     } else if (state == 0) {
        state = 1;
        iframe.contentWindow.location = "a.com/proxy.html";    // 设置的代理文件,再次触发onload事件,

    // 如果不指向本域,由于跨域访问限制原因,window.name还是无法访问的,
     } 
    };
    if (iframe.attachEvent) {
       iframe.attachEvent(‘onload‘, loadfn);
    } else {
       iframe.onload  = loadfn;
    }
    document.body.appendChild(iframe);
   };
   </script>

  

  2.  b.com/data.html 设置数据

  <script type=”text/javascript” >

    window.name=”xxxxx”;        

     /* xxxxx就是要传输的数据。将数据放到window.name中供不同域的web程序使用;

       数据大小限制不同浏览器要求不同  ie ,firefox貌似为32m,其余为2m好像 ,类型可为json,字符串*/

  </script>

 

  3. a.com/proxy.html 不需要有任何代码

总结:iframe的src属性由外域转向本地域,跨域数据即由iframe的window.name从外域传递到本地域。

   这个就巧妙地绕过了浏览器的跨域访问限制,但同时它又是安全操作。

 

window.name跨域实现

标签:

原文地址:http://www.cnblogs.com/xtreme/p/5048829.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!