角度动态路由导致Canvas"无法执行' toDataURL'错误

时间:2015-09-23 16:39:41

标签: angularjs node.js canvas

我正在使用基于Node / Express构建的AngularJS来构建Web应用程序。我的一条路线有一个HTML5画布,我将其转换为图像。如果我用这个遍历到那条路线,我将画布转换为图像没有问题:

when('/myroute/, { templateUrl: 'views/mytemplate.html', controller: 'myCtrl as vm' })

但是,当我使用动态路由时(因为我需要将唯一ID传递给' myroute'页面),Canvas to image conversion会引发以下错误:

  

无法执行' toDataURL' on' HTMLCanvasElement':受污染的画布   可能不会被出口。

以下是我的App.js中的动态路由语法:

when('/myroute/:ID, { templateUrl: 'views/mytemplate.html', controller: 'myCtrl as vm' })

为什么动态路由会导致这种情况......看起来似乎是一个CORS问题,我该如何解决?它可能与"生活"在Node.js / Express上?

以下是我如何将Canvas转换为图像的示例:

var canvasImage = document.getElementById("c");
var img = canvasImage.toDataURL("image/png");

更新1:我刚刚尝试了以下内容,但收到了同样的错误:

var canvasImage = document.getElementById("c");
var img = new Image();
img.crossOrigin = "anonymous";
img.src = canvasImage;
img = canvasImage.toDataURL("image/png");

更新2:深入挖掘之后,我发现由于过度映像来自远程服务器,因此我的叠加会导致实际错误。该远程服务器已启用CORS。真正奇怪的仍然是我的主要问题。它在标准路线中工作,但在动态路线中失败!

1 个答案:

答案 0 :(得分:0)

问题在于Fabric.JS。一旦我在装载的叠加上设置了crossOrigin匿名标志,它就可以了。不确定为什么它事先使用标准路线。这是Fabric.JS中设置的标志:

canvas.setOverlayImage(overlayImg, canvas.renderAll.bind(canvas), {
                crossOrigin: 'anonymous'
            });