Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript IE在画布上调用toDataUrl时引发安全错误_Javascript_Html_Internet Explorer_Canvas_Svg - Fatal编程技术网

Javascript IE在画布上调用toDataUrl时引发安全错误

Javascript IE在画布上调用toDataUrl时引发安全错误,javascript,html,internet-explorer,canvas,svg,Javascript,Html,Internet Explorer,Canvas,Svg,首先,我知道当canvas的源图像来自另一个来源时,访问canvas的toDataURL方法是一个安全问题 但是在我的例子中,我使用数据:url作为我的img的源,然后使用img并在canvas上绘制它,然后调用canvas.toDataUrl 这在Chrome和Firefox上运行良好,但在IE中由于安全错误而失败 有什么想法吗 ... var svgxml = getxmlsvg(); img.onload = function(){ canvas.drawImage(this, 0

首先,我知道当canvas的源图像来自另一个来源时,访问canvas的
toDataURL
方法是一个安全问题

但是在我的例子中,我使用
数据:
url作为我的
img
的源,然后使用
img
并在
canvas
上绘制它,然后调用
canvas.toDataUrl

这在Chrome和Firefox上运行良好,但在IE中由于安全错误而失败

有什么想法吗

...
var svgxml = getxmlsvg();
img.onload = function(){
    canvas.drawImage(this, 0, 0);
    canvas.toDataURL("image/png"); // <--- security error
}
image.src = URL.createObjectURL(new Blob([svgxml], {type: "image/svg+xml;charset=utf-8" }))
。。。
var svgxml=getxmlsvg();
img.onload=函数(){
drawImage(this,0,0);

canvas.toDataURL(“image/png”);//在我的例子中,我将构成图像的图形元素从svg更改为png。使用svg时,我在IE 11(和10)中看到了一个安全错误,而不是Chrome,当我使用toDataURL时。使用png元素构建图形,这很好


IE 11中svg的第二个问题是没有正确调整大小,因此这是另一个反对将svg与IE结合使用的问题。

存在一个库,它抽象svg-->画布-->png,并向svg元素添加一个方法,以便在任何浏览器中都可以通过回调和选项“canvg”调用mySvg.toDataUrl()

此实现考虑了安全异常,因此您可以克服遇到的权限错误

<script type="text/javascript" src="http://canvg.github.io/canvg/rgbcolor.js"></script> 
<script type="text/javascript" src="http://canvg.github.io/canvg/StackBlur.js"></script>
<script type="text/javascript" src="http://canvg.github.io/canvg/canvg.js"></script> 
<script>
<script type="text/javascript" src="http://rawgit.com/sampumon/SVG.toDataURL/master/svg_todataurl.js"></script>

mySVGelement.toDataURL("image/png", {
  renderer: "canvg"
  callback: function(data) {
      image.src = data;
  }
});
</script>

听起来像是IE中的一个bug…这是什么版本的IE?我想是的,我正在使用IE 11。我记不清了,但似乎是因为在画布上绘制svg图像使其
只能写
!并阻止进一步的读取操作!!我已经更新了这个问题。IE具有令人生畏的隐私/安全级别,不一定符合其他要求er浏览器。尝试将它们降到最低,然后再研究它是否是一个错误IE@Bakhshi:你读了你找到的那份文件了吗?它似乎包含了你想要的答案:“SVG可能包含来自多个来源的内容,浏览器倾向于将MIME类型为image/SVG+xml的任何内容作为多来源内容列入黑名单,甚至不测试实际内容。[…]“在这段时间里,IE似乎仍然表现出这种行为耶,你是对的@Bergi。似乎将我的svg呈现为png的唯一选项是
canvg
,这是我试图避免的。有解决方案吗?面临同样的问题,从svg获取数据uri png。与ie11不兼容。我在这里尝试过:
Browser     E x p o r t i n g  f o r m a t
            SVG+XML  PNG/canvg  PNG/native
IE           9+       9+         -
Chrome       +        +          33+ ²
Safari       +        +          -
Firefox      +        +          11+ ¹
Opera        +        +          -