js实现跨域的几种方法汇总(图片ping、JSONP和CORS)


Posted in Javascript onOctober 25, 2015

跨域

虽然有同源策略的存在,但是在js中跨域也依然很常见,有document.domain、window.name、图片ping、jsonp、CORS,在这里简单总结下图片ping、jsonp和CORS备忘。

图片ping

图片可以从任何URL中加载,所以将img的src设置成其他域的URL,即可以实现简单的跨域,可以使用onload和onerror事件来确定是否接受到了响应。

var img=new Image();
img.src='https://3water.com';
img.onerror=function(){
 alert('error');
}
img.onload=function(){
 alert('success');
}

这里新建了一个img对象,给出的url是博客地址,这里是个error事件,所以弹出error;如果将URL改为一张图片http://images.3water.com//710118/o_MacBook%20Air.png,就会弹出onload加载信息success,从而实现了简单的跨域。

使用图片ping跨域只能发送get请求,并且不能访问响应的文本,只能监听是否响应而已,可以用来追踪广告点击。

jsonp

jsonp是带有回调函数callback的json,原名json with padding,翻译是填充式json,参数式json。

因为script的src可以跨域,所以在发送的URL后添加一个callback参数传递给服务器,然后服务器返回的数据会作为callback的参数,因为这个callback是我们自己来实现的,所以可以对接受到的json数据进行处理。

简单代码如下:

<script type="text/javascript">
function call(data){
 alert(data.city);
}
</script>
<script type="text/javascript" src='http://freegeoip.net/json/?callback=call'></script>

这里,我们把脚本的src设置为http://freegeoip.net/json/?callback=call,这是一个获取用户ip地址的api(有兴趣的可以点击这里查看),然后将callback作为一个参数拼接在URL后,返回的json数据就会作为callback的参数,在这里callback我们定义为call函数,即返回的json数据就会作为call的参数传进去,这个call函数仅仅弹出用户的城市city。笔者这里的输出结果是河北。其他ip信息可以查看官网,上面有详细的列表,比如country_name,time_zone等。

CORS(跨资源共享)

CORS是跨资源共享,cross site resourse sharing,它和ajax其实是大体相同的,对于ie实例化的是xdr对象,XDomainRequest,我们能访问的也只有responseText,触发的事件有load和error,写法和xhr大体相同,也需要open和send。

对于ff,chrome等其他浏览器实例化的是xhr,在这里myvin仅仅拿xhr来演示下,如果要实现跨浏览器,可以配合xdr实现兼容。

xhr如下:

var xhr=new XMLHttpRequest();   
var url="https://3water.com";
xhr.open('GET', url); 
xhr.send(null);

这里使用的url是https://3water.com,和ajax唯一的区别就是url使用的是跨域的绝对地址,在ajax中使用的本页面内的相对地址或绝对地址。

看一下控制台,这里用的是ff40.0.3,显示信息如下:

已阻止跨源请求:同源策略禁止读取位于 https://3water.com 的远程资源。(原因:CORS 头缺少 'Access-Control-Allow-Origin')。

所以用CORS实现跨域还有一步要做,就是在服务器端设置Access-Control-Allow-Origin。

Javascript 相关文章推荐
javascript Object与Function使用
Jan 11 Javascript
jquery显示和隐藏div特效实例
Feb 27 Javascript
使用GruntJS链接与压缩多个JavaScript文件过程详解
Aug 02 Javascript
基于jQuery实现网页进度显示插件
Mar 04 Javascript
JS对大量数据进行多重过滤的方法
Nov 04 Javascript
详解webpack分离css单独打包
Jun 21 Javascript
微信小程序三级联动地址选择器的实例代码
Jul 12 Javascript
使用validate.js实现表单数据提交前的验证方法
Sep 04 Javascript
js监听html页面的上下滚动事件方法
Sep 11 Javascript
layui实现下拉框三级联动
Jul 26 Javascript
Angular8 实现table表格表头固定效果
Jan 03 Javascript
JavaScript实现跟随鼠标移动的盒子
Jan 28 Javascript
详解JavaScript编程中的数组结构
Oct 24 #Javascript
向JavaScript的数组中添加元素的方法小结
Oct 24 #Javascript
jQuery实现鼠标经过事件的延时处理效果
Aug 20 #Javascript
使用jquery动态加载Js文件和Css文件
Oct 24 #Javascript
JavaScript中数组的合并以及排序实现示例
Oct 24 #Javascript
使用javaScript动态加载Js文件和Css文件
Oct 24 #Javascript
js判断日期时间有效性的方法
Oct 24 #Javascript
You might like
php 远程关机操作的代码
2008/12/05 PHP
CodeIgniter配置之config.php用法实例分析
2016/01/19 PHP
PHP链表操作简单示例
2016/10/15 PHP
用Div仿showModalDialog模式菜单的效果的代码
2007/03/05 Javascript
js+CSS 图片等比缩小并垂直居中实现代码
2008/12/01 Javascript
JQuery 自定义CircleAnimation,Animate方法学习笔记
2011/07/10 Javascript
javascript学习笔记(十四) window对象使用介绍
2012/06/20 Javascript
浅谈Nodejs观察者模式
2015/10/13 NodeJs
学习JavaScript事件流和事件处理程序
2016/01/25 Javascript
JavaScript操作选择对象的简单实例
2016/05/16 Javascript
jQuery EasyUI 获取tabs的实例解析
2016/12/06 Javascript
xmlplus组件设计系列之分隔框(DividedBox)(8)
2017/05/02 Javascript
JS判断Android、iOS或浏览器的多种方法(四种方法)
2017/06/29 Javascript
JS实现简单的选择题测评系统代码思路详解(demo)
2017/09/03 Javascript
Vue+Vux项目实践完整代码
2017/11/30 Javascript
详解mpvue小程序中怎么引入iconfont字体图标
2018/10/01 Javascript
vue移动端html5页面根据屏幕适配的四种解决方法
2018/10/19 Javascript
vue实现中部导航栏布局功能
2019/07/30 Javascript
js+springMVC 提交数组数据到后台的实例
2019/09/21 Javascript
json解析大全 双引号、键值对不在一起的情况
2019/12/06 Javascript
[42:32]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.27
2020/12/01 DOTA
[01:33:25]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第一场 1月24日
2021/03/11 DOTA
在Python中关于中文编码问题的处理建议
2015/04/08 Python
Python基础语法(Python基础知识点)
2016/02/28 Python
Python selenium 三种等待方式解读
2016/09/15 Python
基于Python开发chrome插件的方法分析
2018/07/07 Python
python向图片里添加文字
2019/11/26 Python
使用 Python ssh 远程登陆服务器的最佳方案
2020/03/06 Python
入党积极分子思想汇报
2014/01/02 职场文书
体育专业学生自我评价范文
2014/01/17 职场文书
幼儿园母亲节活动方案
2014/03/10 职场文书
春游踏青活动方案
2014/08/14 职场文书
庆祝儿童节标语
2014/10/09 职场文书
2014年教研组工作总结
2014/11/26 职场文书
先进基层党组织材料
2014/12/25 职场文书
逃课检讨书范文
2015/05/06 职场文书