【问题标题】:The canvas has been tainted by cross-origin data画布已被跨域数据污染
【发布时间】:2015-01-05 07:19:23
【问题描述】:

问题

/etc/apache2/apache2.conf

 <Directory /var/www/html>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
     <IfModule mod_setenvif.c>
<IfModule mod_headers.c>
    <FilesMatch "\.(cur|gif|ico|jpe?g|png|svgz?|webp)$">
        SetEnvIf Origin ":" IS_CORS
        Header set Access-Control-Allow-Origin "*" env=IS_CORS
    </FilesMatch>
</IfModule>
</IfModule>
  </Directory>
  • 再次启动 apache。

错误:

   Uncaught SecurityError: Failed to execute 'getImageData' on 'CanvasRenderingContext2D': The canvas has been tainted by cross-origin data.

代码

        var image = ctx.getImageData(0, 0, canvas.width, canvas.height),//debugger breakpoint stop here.
        imageData = image.data;

调试解决方案

  • 我用谷歌搜索,发现没有浏览器允许跨源图像。
  • 我不需要保存跨源图像。
  • .htaccess 文件中的更改。
  • 如何调试问题。

【问题讨论】:

  • 您在.htaccess 中发生了什么变化? &lt;/If Module&gt; 之间的空间真的存在吗?你能告诉你画布渲染代码(相关部分)吗?
  • 我用过代码 mozilla SetEnvIf Origin ":" IS_CORS Header set Access-Control-Allow-Origin "*" env=IS_CORS
  • 我在做任何愚蠢的猛禽是什么错误
  • 您是否将crossorigin 属性添加到您的图像?我想你可以使用crossorigin="anonymous"

标签: javascript apache


【解决方案1】:

除了标题之外,我认为您需要将crossorigin 属性添加到您的图像标签中。

示例图片标签:

<img src="www.domain.com/image.jpg" crossorigin="anonymous" />

如果您通过 javascript 执行此操作,以下是您提供的 Mozilla 链接中的代码示例:

var img = new Image,
    canvas = document.createElement("canvas"),
    ctx = canvas.getContext("2d"),
    src = "http://example.com/image"; // insert image url here

// Notice that they set the cross origin attribute here
img.crossOrigin = "Anonymous";

这是来自文档的相关段落(来源:https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image):

HTML 规范为图像引入了跨域属性 结合适当的 CORS 标头,允许图像 由从外国来源加载的元素定义,用于 画布就好像它们是从当前原点加载的一样。

而且这段话可能对这个页面有帮助(https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes):

默认情况下(即不指定属性时),CORS不 完全使用。 “匿名”关键字意味着不会有 通过 cookie、客户端 SSL 证书交换用户凭据 或 HTTP 身份验证,如 CORS 规范。

【讨论】:

  • 未捕获的类型错误:无法设置属性“宽度”的空错误即时接收
  • canvas.width = img.width; js:31 未捕获的类型错误:无法设置属性“宽度”为空
  • 可能图像尚未加载。在尝试获取宽度之前可能需要使用onload 事件。这里可能是有用的链接:stackoverflow.com/questions/623172/…
猜你喜欢
  • 1970-01-01
  • 2012-11-20
  • 1970-01-01
  • 2020-01-03
  • 2014-04-01
  • 2020-09-17
相关资源
最近更新 更多