日期:2014-05-16  浏览次数:20314 次

javascript跨域解决方案(二)

3.4、iframe+location.hash

这种方法比上面两种稍微繁琐一点,原理如下:

www.a.com下的a.html想和www.b.com下的b.html通信(在a.html中动态创建一个b.html的iframe来发送请求);

但是由于“同源策略”的限制他们无法进行交流(b.html无法返回数据),于是就找个中间人:www.a.com下的c.html(注意是www.a.com下的);

b.html将数据传给c.html(b.html中创建c.html的iframe),由于c.html和a.html同源,于是可通过c.html将返回的数据传回给a.html,从而达到跨域的效果。

三个页面之间传递参数用的是location.hash(也就是www.a.html#sayHello后面的'#sayHello'),改变hash并不会导致页面刷新(这点很重要)。

具体代码如下:

www.a.com/a.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//通过动态创建iframe的hash发送请求
function sendRequest(){
??var ifr = document.createElement('iframe');
??ifr.style.display = 'none';
??//跨域发送请求给b.html, 参数是sayHello
??ifr.src = 'http://www.b.com/b.html#sayHello';
??document.body.appendChild(ifr);
}
//获取返回值的方法
function checkHash() {
??var data = location.hash ?
?????location.hash.substring(1) : ''; <