众所周知啊 浏览器为了安全性 有同源策略..大家在开发工作中时常会遇到...
忘记的同学可以看看这篇文章回顾一下九种跨域方式实现原理
根据文章 image
的 src
、 link
的 href
、 scrpit
的 src
不存在跨域问题
可是当我们使用canvas去绘制我们想要的图片(大多是个性化的二维码分享图)的时候
使用canvas.toDataURL
api获取url的时候
可能会遇到跨域问题 如图
注意 如果仅仅是展示 不会有问题 但是如果你需要获取url做其他事情的时候 就会有同源策略的问题
咦? 这是为什么呢 为什么toDataURL
会存在跨域呢 image不是不会跨域的吗...
我的理解是
仅仅是image的src
属性不存在跨域 而当image被canvas
使用的时候 获取地址就会报错了... 因为他们的文件源不一样,所以跨域
这里给出解决方案
1. image的src的图片地址放在项目的同一域名下(推荐方法 简单粗暴 以免后患)
2.给image添加跨域头
例子
var img = new Image();//创建一个image标签
img.src = '地址';
//解决图片跨域的问题
img.crossOrigin = 'Anonymous';
var canvas = document.getElementById('canvas的id');
var ctx = canvas.getContext("2d");
ctx.drawImage(img,264,805);//绘制图片
这样就不会存在跨域问题了...
当然 为了这个功能大多数是需要image 长按下载
此时我们可以写个canvas 设置display:none;
然后用canvas的api 画好我们想要的图片的时候 在获取src 丢到页面的image标签里
参考文章
https://www.cnblogs.com/Amcc/p/7110021.html
https://blog.csdn.net/qq_42341025/article/details/86676966
网友评论