设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 重新 试卷 文件
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

前端开发 | 那些年曾谈起的跨域(4)

发布时间:2019-06-21 15:44 所属栏目:21 来源:Aaron
导读:http://localhost:7000/b.html !DOCTYPEhtml html head metacontent=text/html;charset=UTF-8http-equiv=Content-Type/ title无/title /head body scripttype=text/javascript functioncheckHash(){ vardata=''; sw

http://localhost:7000/b.html

  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4. <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />  
  5. <title>无</title>  
  6. </head>  
  7. <body>  
  8. <script type="text/javascript">  
  9. function checkHash(){  
  10.     var data = '';  
  11.     switch(location.hash){  
  12.         case '#Aaron':  
  13.               data = 'my Aaron';  
  14.               break;  
  15.         case '#Angie':  
  16.               data = 'my Angie';  
  17.               break;  
  18.         default : break;  
  19.     }  
  20.     data && callBack('#'+data);  
  21. }  
  22. function callBack(hash){  
  23.    var proxy = document.createElement('iframe');  
  24.    proxy.style.display = 'none';  
  25.    proxy.src = 'http://localhost/c.html'+hash;  
  26.    document.body.appendChild(proxy);  
  27. }  
  28. window.onload = checkHash;  
  29. </script>  
  30. </body>  
  31. </html>  

http://localhost:6000/c.html

  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4. <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />  
  5. <title>无</title>  
  6. </head>  
  7. <body>  
  8. <script type="text/javascript">  
  9. parent.parent.location.hash = self.location.hash.substring(1);  
  10. </script>  
  11. </body>  
  12. </html>  

a.html中有一个隐藏的iframe,该iframe指向异域http://localhost:7000/b.html的b.html,且传递hash值给b.html`b.html获取hash值,生成data值,然后动态创建iframe,该iframe将data值传给与a.html同域的c.html 因为c.html与a.html`同域,可以传值固然也就解决了跨域问题。

window.name

window.name这个属性不是一个简单的全局属性只要在一个window下,无论url怎么变化,只要设置好了window.name,那么后续就一直都不会改变,同理,在iframe中,即使url在变化,iframe中的window.name也是一个固定的值,利用这个,我们就可以实现跨域了。

http://localhost:6000/a.html

  1. <iframe src="http://localhost:7000/b.html" frameborder="1"></iframe>  
  2. <script>  
  3. var ifr = document.querySelector('iframe')  
  4. ifr.style.display = 'none'  
  5. var flag = 0;  
  6. ifr.onload = function () {  
  7.     if (flag == 1) {  
  8.         ifr.contentWindow.close();  
  9.     } else if (flag == 0) {  
  10.         flag = 1;  
  11.         ifr.contentWindow.location = 'http://localhost:6000/proxy.html';  
  12.     }  
  13. }  
  14. </script>  

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读