javascript - 安全错误 : The operation is insecure in canvas. 到数据 URL

标签 javascript jquery html openlayers openlayers-3

我已尝试解决下一个错误但没有成功。

我有以下 jQuery 和 HTML5 代码:

<script language="javascript" type="text/javascript">

  function doExportMap() {

      map.once('postcompose', function(event) {

        var canvas = event.context.canvas;

        var exportBMPElement = document.createElement('a');
        exportBMPElement.download = 'Mapa.bmp';
        exportBMPElement.href = canvas.toDataURL('image/bmp');
        document.body.appendChild(exportBMPElement);
        exportBMPElement.click();
        document.body.removeChild(exportBMPElement);
      });

      map.renderSync();
  }

它工作得很好,但现在,我收到以下错误:

SecurityError: The operation is insecure.
exportBMPElement.href = canvas.toDataURL('image/bmp');

怎么了?有什么想法吗?

有趣的是我没有从外部源加载图像。图片来自本地

最佳答案

如果您可以在尝试导出 Canvas 之前发布用于修改 Canvas 的代码,将会很有帮助。根据您提供的信息,我的猜测是您正在将外部来源的内容写入 Canvas 。这就是为什么它以前工作并且不再工作的原因。我假设您的初始测试使用了来自同一来源的资源。


说明

Canvas 与您的代码发出的任何数据请求都存在相同的安全沙箱。任何时候你从另一个域/来源加载内容,它都会触发 Canvas 将 origin-clean 标志设置为 false。这意味着浏览器将阻止您导出已加载到 Canvas 中的数据。 StackOverflow 上有很多关于此类问题的帖子:

关于javascript - 安全错误 : The operation is insecure in canvas. 到数据 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29133612/

相关文章:

javascript - 使用 jQuery 更改文本

javascript - 使用Java在表单Load上加载select html中的查询结果

php - 如何使用复选框将 $1.00 添加到 $amount

javascript - 在用户 x 分钟内未与页面交互后显示模式

javascript - 使用 Jquery Ajax 调用 Asp.net Web 方法

jquery - Ajax 加载程序未在 Google Chrome 中显示

javascript - 如何检索所有数组中至少出现一次的所有对象?

javascript - 返回复选框检查 jquery 上的系统日期

javascript - 在 mouseover/mouseout 事件中使用 $this 关键字声明变量

html - 仅使用 css,html 元素如何填充剩余屏幕高度的 100%?