解决canvas,toDataURL跨域问题 #91

简介: 解决canvas,toDataURL跨域问题 #91

图片服务器需要配置Access-Control-Allow-Origin


设置通配符,允许任何域名访问

header("Access-Control-Allow-Origin: *");

指定域名

header("Access-Control-Allow-Origin: www.xxx.com");

此时,Chrome浏览器不会有Access-Control-Allow-Origin相关的错误信息,但是,还会有其他的跨域错误信息。


HTML crossOrigin属性解决资源跨域问题


在HTML5中,有些元素提供了属性,这些元素包括,CORS(Cross-Origin Resource Sharing)

因此,上面的跨域问题可以这么处理:

const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
const img = new Image();
img.crossOrigin = 'anonymous';
img.onload = () => {
    canvas.width = img.width;
    canvas.height = img.height;
    ctx.drawImage(img, 0, 0, img.width, img.height);
    resolve(canvas.toDataURL());
};
img.src = url;


url 加时间戳,清空缓存


如果上面还是没有解决跨域问题,那么要考虑图片是否被浏览器缓存住了。

没有加时间戳的请求

加上时间戳的请求

因此,代码可以这么写

const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
const img = new Image();
img.crossOrigin = 'Anonymous';
img.onload = () => {
    canvas.width = img.width;
    canvas.height = img.height;
    ctx.drawImage(img, 0, 0, img.width, img.height);
    resolve(canvas.toDataURL());
};
img.src = url + '?time=' + new Date().valueOf();
目录
相关文章
|
6月前
|
JavaScript 前端开发
js如何获得浏览器的宽高
js如何获得浏览器的宽高
53 5
|
6月前
|
前端开发 算法 计算机视觉
用canvas消除锯齿的方式
用canvas消除锯齿的方式
249 0
|
缓存 前端开发 JavaScript
怎么解决canvas中获取跨域图片数据的问题?
怎么解决canvas中获取跨域图片数据的问题?
358 0
Egret资源跨域问题
Egret资源跨域问题
75 0
处理图片跨域问题
处理图片跨域问题
61 0
|
机器学习/深度学习 Web App开发 移动开发
通过Canvas在浏览器中更酷的展示视频
有了Canvas可以更灵活的展示体验更好的视频,能够与页面更好的融合。
464 0
通过Canvas在浏览器中更酷的展示视频
fbh
|
前端开发 HTML5 移动开发
分享一个canvas代码2
学习HTML5 Canvas这一篇文章就够了 HTML5 Canvas粒子效果文字动画特效DEMO演示 展现地址:http://csdn.
fbh
865 0
fbh
|
Web App开发 前端开发
分享一个canvas代码
首先需要已入jquery 然后直接运行 function project3D(x,y,z,vars){var p,d;x-=vars.
fbh
1040 0