我正在尝试使用未托管在服务器上的文件半重新创建Mozilla demo对JavaScript + <video>
+ <canvas>
的使用。
加载我的文档会导致错误控制台报告此错误:
错误:未捕获异常:[例外...“安全错误”代码:“1000”nsresult:“0x805303e8(NS_ERROR_DOM_SECURITY_ERR)”位置:“file:/// 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)有本地文件访问权限有关,但我无法弄清楚从哪里去。
答案 0 :(得分:4)
从文件系统中,每个文件都有不同的来源(这可以防止访问例如/etc/passwd
-let,例如使用XMLHttpRequest
或iframe
,然后将数据传递到某个服务器上加载<img>
时使用查询字符串的Web或通过javascript自动发送表单的Web)。请参阅http://tools.ietf.org/html/draft-abarth-origin(它谈到“实现定义的值”,最简单的是每个文件具有不同的来源)
解决问题的最简单方法是运行HTTP服务器。
可能有一个使用Firefox's "per-file permission"的解决方案,但我不确定它是否真的值得,因为运行本地HTTP服务器有多便宜......(YMMV)
答案 1 :(得分:1)
您需要从同一个来源访问该文件,我认为file://协议由于明显的安全原因而受到严格限制。
只有扩展程序可以访问这些文件,并具有更多权限。
答案 2 :(得分:0)
Firefox的文件访问原始策略可以在&#34; about:config&#34;中更改。 要在文件上删除相同的原始策略:URI,请更改&#34; true&#34;的价值 security.fileuri.strict_origin_policy为false。Mozilla;about:config;origin_policy setting