解决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();
目录
相关文章
|
3天前
|
移动开发 前端开发 JavaScript
前端H5使用canvas画爱心以及笑脸
本文介绍了HTML5中的canvas元素及其基本用法,通过JavaScript在canvas上绘制图形。首先简述了canvas的功能,接着详细展示了如何使用`bezierCurveTo`方法绘制爱心和`arc`方法绘制笑脸,并附有示例代码及效果说明。最后总结了canvas在网页图形绘制上的应用潜力。
|
5月前
|
移动开发 前端开发 JavaScript
浏览器端图表渲染技术SVG, VML HTML Canvas
浏览器端图表渲染技术SVG, VML HTML Canvas
40 0
|
缓存 前端开发 JavaScript
怎么解决canvas中获取跨域图片数据的问题?
怎么解决canvas中获取跨域图片数据的问题?
359 0
Egret资源跨域问题
Egret资源跨域问题
77 0
处理图片跨域问题
处理图片跨域问题
61 0
|
前端开发 JavaScript
html2canvas实现页面截图并使用axios上传
html2canvas实现页面截图并使用axios上传
482 0
html2canvas实现页面截图并使用axios上传
|
机器学习/深度学习 Web App开发 移动开发
通过Canvas在浏览器中更酷的展示视频
有了Canvas可以更灵活的展示体验更好的视频,能够与页面更好的融合。
466 0
通过Canvas在浏览器中更酷的展示视频