Canvas图片跨域会遇到的问题及解决方法总结

本篇文章给大家带来的内容是关于canvas图片跨域会遇到的问题及解决方法总结,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

尽管不通过 CORS 就可以在 Canvas 画布中使用图片,但是这会污染画布。一旦画布被污染,你就无法读取其数据。例如,你不能再使用画布的 toBlob(), toDataURL() 或 getImageData() 方法,调用它们会抛出安全错误。这种机制可以避免未经许可拉取远程网站信息而导致的用户隐私泄露。

HTML 规范中图片有一个 crossorigin 属性,结合合适的 CORS 响应头,就可以实现在画布中使用跨域 Canvas图片跨域会遇到的问题及解决方法总结 元素的图像。

crossOrigin/CORS 同域 跨域无 CORS 跨域有 CORS

default支持支持渲染,不支持 toDataURL支持渲染,不支持 toDataURLanonymousN/A同上支持渲染,支持 toDataURLuse-credentialsN/A同上支持渲染,不支持 toDataURL

总结:Canvas 可以正常的渲染跨域图片,但是在跨域图片没有设置跨域响应头或没有设置 crossOrigin = ‘anonymous’ 的时候,使用 canvas.toDataURl 会抛出如下错误:

Chrome

没有设置 crossOrigin

Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.at Image.img.onload...

登录后复制

跨域

Access to Image at 'http://localhost:3001/canvas.jpg' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access.

登录后复制

设置了 crossOrigin=use-credentials

Access to Image at 'http://localhost:3002/canvas.jpg' from origin 'http://localhost:3000' has been blocked by CORS policy: The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'. Origin 'http://localhost:3000' is therefore not allowed access.

登录后复制

Safari/Firefox

没有设置 crossOrigin

SecurityError: The operation is insecure.

跨域

[Error] Origin http://192.168.3.99:3000 is not allowed by Access-Control-Allow-Origin.[Error] Failed to load resource: Origin http://192.168.3.99:3000 is not allowed by Access-Control-Allow-Origin. (canvas.jpg, line 0)[Error] Cross-origin image load denied by Cross-Origin Resource Sharing policy.

登录后复制

设置了 corssOrigin=use-credentials

[Error] Cannot use wildcard in Access-Control-Allow-Origin when credentials flag is true.[Error] Failed to load resource: Cannot use wildcard in Access-Control-Allow-Origin when credentials flag is true. (canvas.jpg, line 0)[Error] Cross-origin image load denied by Cross-Origin Resource Sharing policy.

登录后复制

测试示例

1、启动服务器

npm start:启动服务器

npm run start:corsdisable:启动跨域图片服务器

npm run start:corsable:启动跨域-CORS图片服务器

2、访问 http://localhost:3000

其他问题

1、cossOrigin 存在兼容性问题

对于不支持 cossOrigin 的浏览器(IE 10及以下版本不支持,Android 4.3 及以下版本不支持)可以使用 XMLHttprequest 和 URL.createObjectURL() 来做兼容,参考测试示例 Ajax 解决 Canvas 图片跨域问题。

2、为什么不使用同域图片?

现在的前端开发一般都是将静态资源放置到 CDN 上,例如:阿里云或者腾讯云服务,并且会有一个专门的域名来访问这些资源。

以上就是Canvas图片跨域会遇到的问题及解决方法总结的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2909081.html

(0)
上一篇 2025年3月11日 03:19:26
下一篇 2025年3月11日 03:20:00

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 如何用canvas绘制矩形?canvas画矩形的两种方法介绍

    canvas元素使用javascript在网页上绘制图像。画布是一个矩形区域,您可以控制其每一像素。canvas 拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。所以,如何用canvas绘制一个矩形呢?接下来这篇文章将给大家来介绍关于…

    2025年3月11日
    100
  • 使用html5可以干什么?Html5的优势和劣势(总结)

    本章给大家介绍使用html5可以干什么?html5的优势和劣势(总结),让大家可以了解html5是什么,有什么用,html5的优势和劣势是什么。有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 一、html5可以干什么? 在介…

    编程技术 2025年3月11日
    200
  • html5使用canva实现验证码效果(代码实例)

    通常我们在登录界面上都可以看到验证码,验证码的作用是检测是不是人在操作,防止机器等非人操作,防止数据库被轻而易举的攻破。一般情况下验证码都是用php和java等后端语言编写;其实,验证码也可以用前端技术实现:用canva或者svg绘制验证码…

    2025年3月11日
    200
  • html5 canvas常用属性方法(介绍)

    本章给大家带来html5 canvas常用属性方法(介绍),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 首先引入标签就不必说了。 其次就是得到canvas的2d环境了( var ctx = canvasDom.getCo…

    编程技术 2025年3月11日
    200
  • html5利用canvas实现图片转素描效果

    本章给大家介绍html5如何利用canvas实现图片转素描效果。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 素描滤镜原理:最基础的算法就是:1、去色;(去色公式:gray = 0.3 red + 0.59 green …

    2025年3月11日
    200
  • 如何使用HTML5实现地理位置的获取

    现在的移动端大部分都带有gps定位功能,一方面可以利用基站获取位置,另一方面可以用gps芯片精确定位,那么我们在前端开发的过程中,如何在用户同意分享地理位置的情况下获取精确的定位信息呢?本文向大家展示如何使用html5实现地理位置的获取,有…

    2025年3月11日
    200
  • canvas渐变色:canvas如何实现渐变色的效果?

    在我们打开某个网页的时候,可能会看到有的页面中有颜色的渐变,感觉很好看,那么,这种渐变色是如何实现的呢?所谓渐变色其实就是颜色之间的过渡,而html5 canvas渐变是一种用于填充或描边图形的颜色模式,所以,利用canvas如何实现颜色的…

    2025年3月11日
    200
  • canvas文字怎么换行?canvas文字换行的方法介绍

    html5中的canvas是用于绘制图形的,可以通过 javascript 来控制它绘制各种文本和图像,但是在使用 canvas 绘制文字的时候,我们可能想要让这些文字在某处按要求换行,这该如何实现呢?本篇文章将来给大家介绍关于canvas…

    2025年3月11日
    200
  • html5需要遵守的6个原则(介绍)

    使得html5得以快速推广一系列原则是什么?本章给大家介绍html5需要遵守的6个原则。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 原则一:避免不必要的复杂性 html4 立即学习“前端免费学习笔记(深入)”; nbs…

    编程技术 2025年3月11日
    200
  • 移动端HTML5模拟长按删除事件(附代码)

    本篇文章给大家带来的内容是关于移动端html5模拟长按删除事件(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 为啥写这篇文章 最近接了个需求,要求长按某个标签显示删除一个悬浮的删除按钮。这个需求其实在app上很常…

    2025年3月11日
    200

发表回复

登录后才能评论