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

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

发布:smiling 来源: PHP粉丝网  添加日期:2022-07-21 20:55:27 浏览: 评论: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.  
  3. <html> 
  4.  
  5. <head> 
  6.  
  7.   <meta charset="UTF-8"> 
  8.  
  9.   <title>Insert title here</title> 
  10.  
  11. </head> 
  12.  
  13. <body> 
  14.  
  15.   <script type="text/javascript"> 
  16.  
  17.     //添加需要传递的数据,大小一般为2M,IE和firefox下可以大至32M左右 
  18.  
  19.     window.name = '[{"name":"test1"},{"name":"test2"}]'; 
  20.  
  21.   </script> 
  22.  
  23. </body> 
  24.  
  25. </html> 

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

  1. <!DOCTYPE html> 
  2.  
  3. <html> 
  4.  
  5. <head> 
  6.  
  7.   <meta charset="UTF-8"> 
  8.  
  9.   <title>Insert title here</title> 
  10.  
  11. </head> 
  12.  
  13. <body> 
  14.  
  15.   <!-- 空的html文件 --> 
  16.  
  17. </body> 
  18.  
  19. </html> 

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

  1. <!DOCTYPE html> 
  2.  
  3. <html> 
  4.  
  5. <head> 
  6.  
  7.   <meta charset="UTF-8"> 
  8.  
  9.   <title>Insert title here</title> 
  10.  
  11. </head> 
  12.  
  13. <body> 
  14.  
  15.    
  16.  
  17. <!-- 用于引用www.b.com/data.html文件 --> 
  18.  
  19. <iframe id="iframe" src=""></iframe> 
  20.  
  21.    
  22.  
  23. <!-- 显示获取到的数据 --> 
  24.  
  25. <p id="data"></p> 
  26.  
  27.    
  28.  
  29. <script type="text/javascript" src="./jquery.js"></script> 
  30.  
  31. <script type="text/javascript"> 
  32.  
  33. var ifr = document.getElementById("iframe"); 
  34.  
  35. ifr.src = "http://www.b.com/data.html"; 
  36.  
  37. if (ifr.attachEvent) { 
  38.  
  39.   ifr.attachEvent("onload", loadfunc); 
  40.  
  41. } else { 
  42.  
  43.   ifr.onload = loadfunc; 
  44.  
  45. } 
  46.  
  47.    
  48.  
  49. var state = 0; 
  50.  
  51. function loadfunc() { 
  52.  
  53.   if(state == 0) { 
  54.  
  55.     state = 1; 
  56.  
  57.     ifr.contentWindow.location = "http://www.a.com/proxy.html"; 
  58.  
  59.   } else { 
  60.  
  61.     var data = ifr.contentWindow.name; 
  62.  
  63.     $.each($.parseJSON(data), function(i, v) { 
  64.  
  65.       $("#data").append(v.name); 
  66.  
  67.     }); 
  68.  
  69.        
  70.  
  71.     //销毁iframe,保证安全 
  72.  
  73.     ifr.contentWindow.document.write(""); 
  74.  
  75.     ifr.contentWindow.close(); 
  76.  
  77.     document.body.removeChild(ifr); 
  78.  
  79.   } 
  80.  
  81. } 
  82.  
  83. </script> 
  84.  
  85. </body> 
  86.  
  87. </html>

Tags: window.name

分享到: