3

我正在尝试使用未托管在服务器上的文件来半重新创建 Mozilla对 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)存在本地文件访问问题有关,但我不知道从那里去哪里。

4

3 回答 3

4

从文件系统中,每个文件都在不同的来源(这可以防止访问例如 -/etc/passwd比如说使用 anXMLHttpRequest或 an iframe,然后在加载 an<img>或通过 javascript 自动发送表单时使用查询字符串将数据传递到 Web 上的某个服务器) . 请参阅https://datatracker.ietf.org/doc/html/draft-abarth-origin(它谈论“实现定义的值”,最简单的是每个文件都有一个不同的来源)

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

可能有一个使用Firefox 的“每个文件权限”的解决方案,但我不确定它是否真的值得,因为运行本地 HTTP 服务器有多便宜......(YMMV)

于 2009-06-25T10:31:16.933 回答
1

您需要从同一来源访问该文件,并且我认为 file:// 协议出于明显的安全原因非常受限制。

只有扩展才能以更多权限访问这些文件。

于 2009-06-24T21:59:47.950 回答
1

Firefox 的文件访问源策略可以在“about:config”中更改。要消除文件的同源策略:URI,请将 security.fileuri.strict_origin_policy 的“true”值更改为 false。Mozilla;about:config;origin_policy 设置

于 2016-11-28T11:28:28.857 回答