当前位置:首页 > PHP教程 > php高级应用 > 列表

PHP下ajax跨域的解决方案之window.name实例分析

发布:smiling 来源: PHP粉丝网  添加日期:2022-02-18 16:37:53 浏览: 评论:0 

本文实例讲述了PHP下ajax跨域的解决方案之window.name,分享给大家供大家参考,具体如下:

原理核心:window对象的name属性是一个很特别的属性,当该window的location变化,然后重新加载,它的name属性可以依然保持不变。

依此原理,我们可以在页面A中用iframe加载其他域的页面B,而页面B中用JavaScript把需要传递的数据赋值给 window.name,页面A的iframe加载完成之后,页面A修改iframe的地址,将其变成同域的一个地址,然后就可以读出window.name的值了。

例:有两个网站www.a.com和www.b.com,我们要在www.a.com/a.html下获取www.b.com/data.html数据。

我们需要三个文件:

www.a.com 下的 a.html 获取数据并显示

www.b.com 下的data.html 提供数据

www.a.com 下的proxy.html 代理文件,与a.html同一域下,一般为空html文件。

www.b.com下的data.html如下:

  1. <!DOCTYPE html> 
  2. <html> 
  3. <head> 
  4.   <meta charset="UTF-8"> 
  5.   <title>Insert title here</title> 
  6. </head> 
  7. <body> 
  8.   <script type="text/javascript"> 
  9.     //添加需要传递的数据,大小一般为2M,IE和firefox下可以大至32M左右 
  10.     window.name = '[{"name":"test1"},{"name":"test2"}]'
  11.   </script> 
  12. </body> 
  13. </html> 

www.a.com下的proxy.html如下:

  1. <!DOCTYPE html> 
  2. <html> 
  3. <head> 
  4.   <meta charset="UTF-8"> 
  5.   <title>Insert title here</title> 
  6. </head> 
  7. <body> 
  8.   <!-- 空的html文件 --> 
  9. </body> 
  10. </html> 

www.a.com下的a.html如下:

  1. <!DOCTYPE html> 
  2. <html> 
  3. <head> 
  4.   <meta charset="UTF-8"> 
  5.   <title>Insert title here</title> 
  6. </head> 
  7. <body> 
  8.    
  9. <!-- 用于引用www.b.com/data.html文件 --> 
  10. <iframe id="iframe" src=""></iframe> 
  11.    
  12. <!-- 显示获取到的数据 --> 
  13. <div id="data"></div> 
  14.    
  15. <script type="text/javascript" src="./jquery.js"></script> 
  16. <script type="text/javascript"> 
  17. var ifr = document.getElementById("iframe"); 
  18. ifr.src = "http://www.b.com/data.html"
  19. if (ifr.attachEvent) { 
  20.   ifr.attachEvent("onload", loadfunc); 
  21. } else { 
  22.   ifr.onload = loadfunc
  23.    
  24. var state = 0
  25. function loadfunc() { 
  26.   if(state == 0) { 
  27.     state = 1
  28.     ifr.contentWindow.location = "http://www.a.com/proxy.html"
  29.   } else { 
  30.     var data = ifr.contentWindow.name; 
  31.     $.each($.parseJSON(data), function(i, v) { 
  32.       $("#data").append(v.name); 
  33.     }); 
  34.        
  35.     //销毁iframe,保证安全 
  36.     ifr.contentWindow.document.write(""); 
  37.     ifr.contentWindow.close(); 
  38.     document.body.removeChild(ifr); 
  39.   } 
  40. </script> 
  41. </body> 
  42. </html>

Tags: ajax跨域 window.name

分享到: