- 只要协议、域名、端口有任何一个不同,都会被当成不同的域
- js跨域是指:通过js在不同的域之间进行数据传输或通信
解决方法:
- 通过jsonp:在页面上引入不同域的js脚本文件。
实现方法:通过script标签引入一个js文件,如:<script src="http://网址?callback=函数名"></script>这样这个文件载入成功后悔执行我们在url参数中指定的函数,并把json数据作为参数传入。函数题中写数据的处理方法。例如
<script>
function 函数名(jsondata){
处理方法
}
</script>
- 通过修改document.domain来跨子域
方法:把两个跨域的页面的doucument.domain设置成相同的域名;
注意:只能设置为自身或更高一级的父域,且主域必须相同;例如:同时在两个页面里面书写
<script>
document.domain='网址';
</script>
- 通过window.name来进行跨域
方法(原页面a,目标页面b):
- 给b页面的window.name设置window.name为a页面想要得到的数据;
- 在a页面使用一个隐藏的iframe来充当中间角色去获取数据,a去获取iframe的数据
- 把iframe的scr设为b的地址
- 获取后,把iframe的src设置为与a页面同源的;
- 使用html5中window.postMessage来跨域
方法:
- 在发送消息的页面使用postMessage函数,第一个参数为要发送的消息,类型只能是字符串,第二个参数为targetOrigin用来限定接收消息的那个window对象所在的域,如果不想限定域,可以使用通配符 * 。
- 接受消息的页面通过自身的onmessage函数来监听,消息内容储存在该事件对象的data属性中。