Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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中的跨源污染_Javascript_Image_Canvas - Fatal编程技术网

无法理解如何避免JavaScript中的跨源污染

无法理解如何避免JavaScript中的跨源污染,javascript,image,canvas,Javascript,Image,Canvas,我在下面的代码中得到了关于交叉源污染的错误,我不知道为什么。我认为当您试图从外部服务器提取映像时,会发生跨源污染,但映像来自本地目录 var image = new Image(); $(image).on("load", function() { ctx.drawImage(image, 0, 0, 1080/scale, 1920/scale); /*Error occurs here */ var imageData = ctx.getImageData(0, 0

我在下面的代码中得到了关于交叉源污染的错误,我不知道为什么。我认为当您试图从外部服务器提取映像时,会发生跨源污染,但映像来自本地目录

var image = new Image();
$(image).on("load", function() {
    ctx.drawImage(image, 0, 0, 1080/scale, 1920/scale);

    /*Error occurs here */
    var imageData = ctx.getImageData(0, 0,
        this.width / scale,
        this.height / scale);
    var pixels = imageData.data;

    ...
});
image.src = "test2.jpg"; 

本地文件系统被声明为跨源,并将污染画布。这是一个很好的声明,因为您最敏感的信息可能在本地文件系统上

以下是符合CORS安全性的一些方法:

  • 在本地计算机上安装web服务器,并在该服务器上提供图像和.html/.css/.js文件。PHP和IIS都有优秀的本地版本

  • 将图像放在符合CORS标准的托管服务上(imagur.com是其中之一)

  • 对于小型项目,有时可以将图像和网页文件都放在桌面上


定义“本地”。这个文件实际上是通过HTTP服务器托管的,还是您通过
文件://
访问它?我通过file://.Most (所有?)浏览器不允许访问本地文件系统。根据您的浏览器,您可以覆盖此选项(例如,Chrome支持
--允许从文件访问文件
标志)。你是否应该这样做取决于你对其他安全层的自信程度以及你如何使用网络。我现在正在使用Chrome来测试一切,所以我可以暂时这样做,但如果我在AWS上托管所有内容,我能避免交叉污染问题吗?只要它是通过HTTP服务器运行的,你就可以了。这就是我感到困惑的地方,因为图像在工作区的文件夹中。如果网页和图像都在一个目录中,难道不应该认为它们都在桌面上吗?不,所有的文件都必须在桌面上。如果图像文件包含属性信息,表明它们不是本地生成的,则即使这样也可能不起作用。我建议只安装本地web服务器,除非这是一个一次性项目。;-)嗯,好吧。然后我将安装一个本地web服务器。非常感谢你的帮助!