同源策略与跨域问题

匿名 (未验证) 提交于 2019-12-02 23:43:01

浏览器的同源策略:

如果三者有一个不相同,就会造成跨域;阮一峰老师在文中曾提到过;如果不是同源,就会:

Cookie,localStorage,IndexDB将不可以获取到.

Dom无法获取.

ajax请求失败.

我们可以使用以下几种方法:

1.iframe+window.domain

如果有两个不同源的页面,例如:a.test.com 和 b.test.com;

我们在两个页面可以设置

然后我们可以使用页面window下的方法实现了共享.

如果我们在a下面定义了一个:

};

那么在b中:

2.iframe+window.name

window对象有个name属性,该属性有个特征:即在一个窗口(window)的生命周期内,

窗口载入的所有的页面都是共享一个window.name的,

每个页面对window.name都有读写的权限。(window.name的值只能是字符串的形式,这个字符串的大小最大能允许2M左右甚至更大的一个容量,具体取决于不同的浏览器,一般够用了。)

如果有两个不同源的页面,例如:a.test.com 和 b.test.com;

在a中:

在b中:

js:

 function test(){         var obj = document.getElementById("iframe");         obj.onload = function(){             var msg = obj.contentWindow.name;             console.log(msg);         }         obj.src = "b.test.com/b1.html"; }

设置一个空的b1页面接受;我们可以看见输出// i am a.html

3.iframe+window.postMessage()

发送消息的"postMessage"方法:

向外界窗口发送消息:

otherWindow.postMessage(message, targetOrigin);

如果有两个不同源的页面,例如:a.test.com 和 b.test.com;

在a的a.html中:

}else{

}

}

在b中:

html:

js:

}else{

}

},false)

}

}

4.jsonp跨域

jsonp是利用script标签可以跨域访问资源的特性,在页面内动态插入一个script标签,向服务器发起数据的跨域请求。服务器收到请求后,将数据放在一个指定名字的回调函数中传回;

function addScriptTag(src) {   var script = document.createElement('script');   script.setAttribute("type","text/javascript");   script.src = src;   document.body.appendChild(script); }  window.onload = function () {   addScriptTag('http://example.com/ip?callback=foo'); }  function foo(data) {   console.log('Your public IP address is: ' + data.ip); };

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!