我在 chrome 上遇到 Canvas 的问题。我知道这被提到了很多,但我找不到适合我的解决方案。
基本上,我正在设计一个执行以下步骤的网站:
- 将 SVG 图像模板从托管服务器加载到对象中。
- 处理 SVG(着色、隐藏和显示图层等)
- 然后将处理后的版本发送到服务器以插入 pdf 文档并通过电子邮件发送。
我的问题是最后一步。我使用的方法包括:
- 获取 SVG 的内容文档并序列化其 XML。
var s = new XMLSerializer();
svg = document.getElementById('theSVG').contentDocument;
var xmlTest = s.serializeToString(svg);
使用 onLoad 函数定义新图像并将 src 应用到它:
drawImage.src = '数据:图像/svg+xml,' + 转义(xmlTest);
创建一个画布元素并将该图像绘制到其中:
var canvas = document.createElement('canvas'); var cont = canvas.getContext('2d'); cont.drawImage(drawnImage, 0, 0, canvas.width, canvas.height);
最后一步是从 canvas 元素中提取 dataURI,如下所示:
var ImageDataURl = canvas.toDataURL();
之后,数据(base64)被发送到服务器,转换为位图并保存为服务器磁盘上的 jpeg 图像,然后作为大 pdf 文档的一部分插入。
一切都很顺利,直到我在 chrome 上对其进行了测试,然后我遇到了安全错误:
Uncaught SecurityError: 试图突破用户代理的安全策略
当我读到这个错误时,我知道这是跨域图像的 chrome 安全问题等等。我想知道以下内容:
- 是否正在创建一个新画布并将图像加载到用户浏览器上,将其视为来自另一个域的文件?
- 即使它是服务器端(我正在使用 C#),我不介意是否有解决方法。我尝试上传 SVG XML 并尝试将其转换为 base64 字符串,但没有成功。
任何帮助,将不胜感激。