解决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();
目录
相关文章
|
7月前
|
移动开发 前端开发 JavaScript
浏览器端图表渲染技术SVG, VML HTML Canvas
浏览器端图表渲染技术SVG, VML HTML Canvas
47 0
|
缓存 前端开发 JavaScript
怎么解决canvas中获取跨域图片数据的问题?
怎么解决canvas中获取跨域图片数据的问题?
386 0
|
移动开发 前端开发 JavaScript
Web 动画与过渡效果:CSS3、Canvas 和 GreenSock 的比较
Web 动画和过渡效果是现代 Web 开发中常见的重要功能,用于提升用户体验和页面交互效果。在实现 Web 动画和过渡效果时,我们通常可以选择使用 CSS3、Canvas 或 GreenSock(GSAP)等技术。下面对它们进行比较
295 0
|
Web App开发 JavaScript 安全
如何基于 iframe 解决跨域?
一般跨域听得比较多的方案是 Nginx 代理,CORS,而 JSONP 和 iframe 的跨域解决往往只在背八股文的时候出现,而且老是只给 JSONP 的实际操作手段,老是找不着 iframe 的实际操作,所以这篇文章就是介绍如何基于 iframe 解决跨域
处理图片跨域问题
处理图片跨域问题
66 0
|
JavaScript 前端开发 数据格式
【JavaScript】通过封装自己的JSONP解决浏览器的跨域问题(Ajax跨域)
版权声明:本文为博主原创文章,未经博主允许不得转载。更多学习资料请访问我爱科技论坛:www.52tech.tech https://blog.csdn.net/m0_37981569/article/details/82701029 ...
1332 0
iframe跨域解决方案
    公司某个功能用的是iframe,由于跨域的原因,我们不能直接设置父级页面iframe的高度,所以用了一个中间页home来完成父级页面iframe的高度设置,这种中间页其实很多时候不好用,因为涉及到页面跳转和刷新,每次都得刷一下页面,而消息发送成功页的一个定位到顶部的功能,就是由于页面刷了一次导致体验不好,除了体验,这种中间页跳转的做法也很蹩脚和繁琐。
1494 0