`

js 跨域取数据

阅读更多

 

一  主域名相同处理方法    document.domain+iframe的设置

 

对于主域相同而子域不同的例子,可以通过设置document.domain的办法来解决。具体的做法是可以在http://www.a.com/a.html和http://script.a.com/b.html两个文件中分别加上document.domain = ‘a.com’;然后通过a.html文件中创建一个iframe,去控制iframe的contentDocument,这样两个js文件之间就可以“交互”了。当然这种办法只能解决主域相同而二级域名不同的情况,如果你异想天开的把script.a.com的domian设为alibaba.com那显然是会报错地!代码如下:

 

www.a.com上的a.html
 
document.domain = 'a.com';
var ifr = document.createElement('iframe');
ifr.src = 'http://script.a.com/b.html';
ifr.style.display = 'none';
document.body.appendChild(ifr);
ifr.onload = function(){
    var doc = ifr.contentDocument || ifr.contentWindow.document;
    // 在这里操纵b.html
    alert(doc.getElementsByTagName("h1")[0].childNodes[0].nodeValue);
};
script.a.com上的b.html
 
document.domain = 'a.com';
这种方式适用于{www.kuqin.com, kuqin.com, script.kuqin.com, css.kuqin.com}中的任何页面相互通信。

 

 

备注:某一页面的domain默认等于window.location.hostname。主域名是不带www的域名,例如a.com,主域名前面带前缀的通常都为二级域名或多级域名,例如www.a.com其实是二级域名。 domain只能设置为主域名,不可以在b.a.com中将domain设置为c.a.com。

 

问题:

1、安全性,当一个站点(b.a.com)被攻击后,另一个站点(c.a.com)会引起安全漏洞。

2、如果一个页面中引入多个iframe,要想能够操作所有iframe,必须都得设置相同domain。

 

二 window.name 方法处理

 

 
 
 
 
1 引入test.js 类库
2 同及目录创建一个空的html页面为proxy.html,作为代理
  作用:当iframe远程访问的页面更改window.name属性后跳转到这个代理页面
  则当前页面与代理页面在同一个域名下,则可以取出代理页面的window.name
   
 
3 使用实例:www.aaa.com/a.html ,www.aaa.com/proxy.html, www.eee.com/b.html 
 
 a.html中
<script type="text/javascript" src="test.js"></script>
<script type="text/javascript">
var _str = '', _cnt = 0;  
 
function myfunc( id ) {
   return  function( data ) {  
_str += id + ':' + data + '\n';  
++_cnt;
if (_cnt >= 1)  alert(_str);  
   };  
}
 
var _links = [  
   { id: 1, url: 'http://www.aaa.com/test.html' } 
]; 
 
function dosome(){
   for (var _i=0; _i<_links.length; ++_i) { 
     wnRequest.send(_links[_i].url, myfunc(_links[_i].id));  
  }
}
dosome();
 
//wnRequest.setname('这里可能是一串加密用的密钥哦,俺从 https 那边过来滴!', 'http://www.eee.com/test8.html');  
 
</script>
 
代理页面时空的
 
 
 b.html 中  
<script type="text/javascript">
   window.name = '需要跨域传递的数据';
</script>
 

 

 

附件中是:跨域调用的类库

 

参考来自: http://www.iteye.com/topic/901182

 

 

分享到:
评论
Global site tag (gtag.js) - Google Analytics