解决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();
目录
相关文章
|
1月前
|
移动开发 前端开发 JavaScript
浏览器端图表渲染技术SVG, VML HTML Canvas
浏览器端图表渲染技术SVG, VML HTML Canvas
16 0
|
2月前
|
前端开发 算法 计算机视觉
用canvas消除锯齿的方式
用canvas消除锯齿的方式
68 0
|
11月前
|
缓存 前端开发 JavaScript
怎么解决canvas中获取跨域图片数据的问题?
怎么解决canvas中获取跨域图片数据的问题?
238 0
Egret资源跨域问题
Egret资源跨域问题
55 0
|
Web App开发 JavaScript 安全
如何基于 iframe 解决跨域?
一般跨域听得比较多的方案是 Nginx 代理,CORS,而 JSONP 和 iframe 的跨域解决往往只在背八股文的时候出现,而且老是只给 JSONP 的实际操作手段,老是找不着 iframe 的实际操作,所以这篇文章就是介绍如何基于 iframe 解决跨域
|
机器学习/深度学习 Web App开发 移动开发
通过Canvas在浏览器中更酷的展示视频
有了Canvas可以更灵活的展示体验更好的视频,能够与页面更好的融合。
429 0
通过Canvas在浏览器中更酷的展示视频
|
JavaScript 安全 前端开发