1

我是 Construct 2 的开发人员,这是一个适用于 Windows 的 HTML5 游戏编辑器。它位于http://www.scirra.com

最近我一直在尝试添加一个功能,该功能将通过在画布上转换图像来修改图像。这非常简单——在画布上绘制一个图像并调用getImageData()以获取像素。

当用户在我们的应用程序中单击“预览”时,所有文件都被转储到磁盘上的临时文件中,并启动浏览器来显示它。上传到服务器不是预览的选项 - 有些游戏是兆字节大。

然而,大多数浏览器完全阻止您使用从磁盘加载getImageData()的任何图像的像素。正如 MDN 在其对 file:// 访问策略的描述中所建议的那样,我已尝试将所有必要的图像文件放在子目录中。那也不行!

Chrome 的 --allow-file-access-from-files 标志修复了它。但是,我需要支持所有主流浏览器。至少 Internet Explorer 和 Firefox 是否有类似的解决方法?我对 Internet Explorer 一无所知,我真的希望在 Firefox 中有一些不涉及手动转到 about:config 的东西,否则我们将被大量的支持请求淹没,询问“为什么它在 Firefox 中不起作用?!”。

另外,为什么这个安全策略是必要的?!?它似乎太过分了,让像我们这样的应用程序真的很难编写。

任何帮助表示赞赏。

4

1 回答 1

3

你的名字在 HN 听起来很熟悉。

到目前为止,这在规范中已经很明确了,尽管这让很多人感到不安。http://并且file://是不同的起源,任何试图将一个放在另一个上的东西都会弄脏起源。正如您所指出的,文件 uri 本身有自己的一套规则,这些规则使事情变得更加棘手。

在起源不同的画布上绘制一些东西?太糟糕了,从今以后 origin-clean 标志是错误的,这会禁止你做各种事情。

这些东西的完整列表位于此处的规范中。

但我相信你现在已经知道了这一切。你想绕过它。

我建议您不要尝试对周围的浏览器进行强力武装,而是将其捆绑在某种轻量级 Web 服务中,以便所有事物都从同一来源出现。它将在未来引起更少的头痛。

您可能需要Python SimpleHTTPServer之类的东西。但该决定实际上取决于您此时已经包含在产品中的内容。

于 2011-07-15T16:54:56.157 回答