【问题标题】:Chrome: Tainted canvases may not be exported; Offline-only appChrome:受污染的画布可能无法导出;仅离线应用
【发布时间】:2016-11-11 13:24:42
【问题描述】:

这个问题与该主题的许多现有问题相似,但并不完全相同,包括Tainted canvases may not be exported

我正在编写一个仅离线应用程序,它必须保持这种状态并且不能使用本地网络服务器。有没有办法绕过画布上的 CORS 检查,以便将数据复制回基础图像。


这是我正在尝试的代码示例:

var c1 = document.getElementById("tmp1");
var ctx1 = c1.getContext('2d');
var tmpImg1 = document.getElementById("tmpimg1");
ctx1.drawImage(img1, 0, 0, 150, 150);     
tmpImg1.src = c1.toDataURL();

Chrome 的错误信息如下:

未捕获的安全错误:无法在“HTMLCanvasElement”上执行“toDataURL”:可能无法导出受污染的画布。


在仅离线的情况下,哪些选项仍然具有相同的最终结果?

【问题讨论】:

  • 将应用程序和图像文件都放在用户的桌面上。
  • @markE 我希望这是一个选项。我有太多图像无法做到这一点。如果它们在同一个文件夹中,但不一定在桌面上,这会起作用吗?
  • 我已经有一段时间没有检查同一个文件夹是否适用于所有浏览器了,但过去有些浏览器会抛出 CORS 错误而其他浏览器不会。我已经发布了一个带有替代解决方案的答案。

标签: javascript google-chrome firefox html5-canvas


【解决方案1】:

您可以将所有 img.src 指定为内联 base64 编码 URL。

img.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAA ..."

这样所有的 imgs 都是你的应用本地的并且 CORS 是满意的。

【讨论】:

  • 我忘记了这个选项...我相信这是仅离线情况的理想答案。感谢您的帮助!
  • 我正在构建一个图像裁剪器,所以我不知道确切的编码 URL。有没有办法从代码内部生成它们?
猜你喜欢
  • 2021-02-28
  • 2020-03-25
  • 2014-09-14
  • 2018-02-11
  • 2018-04-09
  • 2017-07-12
  • 2017-01-07
  • 1970-01-01
  • 2017-01-02
相关资源
最近更新 更多