我如何绕过一个本地文件同源策略违规到另一个?(How do I bypass a same orig

2019-07-29 05:36发布

我想半重建Mozilla的演示的JavaScript +的使用<video> + <canvas>有未在服务器上托管的文件。

加载在我的文档导致错误控制台报告此错误:

错误:未捕获的异常:[异常... “安全错误” 代码: “1000” nsresult: “0x805303e8(NS_ERROR_DOM_SECURITY_ERR)” 的位置:“文件:///media/disk/javascript/html5/chromakey/chromakey1.htm线: 23" ]

这里是第23行:

this.referenceImageData = this.bCtx.getImageData(0, 0, this.bufferCanvas.width, this.bufferCanvas.height);

它试图从与我先前复制这样的视频帧画布得到的图像数据:

this.bCtx.drawImage(this.inputElement,
    0, 0,
    this.inputElement.width, this.inputElement.height,
    0, 0,
    this.bufferCanvas.width, this.bufferCanvas.height
);

this.inputElement引用这个(相当无趣)元素:

<video id="MainInput" src="320x240.ogg" width="320" height="240"></video>

有没有什么办法让过去的这个错误没有签约我的代码与JAR?

我认为这与Firefox的同源策略(做https://developer.mozilla.org/en/Same_origin_policy_for_JavaScript有一个问题访问本地文件),但我想不通的地方,从那里走。

Answer 1:

从文件系统中,每个文件是在不同来源(这可防止访问例如/etc/passwd -让我们说使用XMLHttpRequestiframe ,并使用查询字符串加载时然后将数据传递给一些服务器在Web上的<img>或自动发送虽然JavaScript中的形式)。 见http://tools.ietf.org/html/draft-abarth-origin (它谈论“实现定义的值”,而最简单的就是让每个文件不同的起源)

要解决您的问题,最简单的方法是运行一个HTTP服务器。

有可能是使用的解决方案Firefox的“按文件权限” ,但我不知道它的真正价值就赋予了它是多么便宜运行本地HTTP服务器......(因人而异)



Answer 2:

您需要从同一产地访问该文件,并且我认为file://协议受到很大限制为明显的安全原因。

只有扩展可以访问这些文件,以更多的权限。



Answer 3:

“:配置关于” Firefox的文件访问的起源策略可以被改变。 为了消除对文件中的同源策略:URI的,security.fileuri.strict_origin_policy的“真”值更改为false。 Mozilla的; about:config中; origin_policy设置



文章来源: How do I bypass a same origin policy violation for one local file to another?