1

我对 HTML5 Filesystem API 的意义感到困惑。

据我所知,引用使用 File API 创建的沙盒文件之一的内容的方式需要引用域名。

“使用 HTML5 文件系统 API”在“安全注意事项”下有这样的说法:

私有数据的泄漏或擦除——通过将 HTML5 文件系统的范围限制为类似于 chroot 的、特定于源的沙箱来缓解这种情况。应用程序无法访问另一个域/源的文件系统。

但究竟什么是“起源”?据我所知,那本书没有定义它们。在我看来,一个来源必须包含一个域名,即使该域是localhost.

是这样吗?如果是的话,那就糟了。这意味着我们再次无法构建可以编辑本地文件的编辑器。当然,有安全方面的考虑,但这不就是让编辑本地文件成为可能的计划的一部分吗?HTML5 API 是专门针对 Internet 上的内容还是针对知道如何设置本地服务器的人?

4

1 回答 1

3

这是 HTML5 中原点的完整定义,参考RFC 6454。就您而言,重要的是:

如果两个源是方案/主机/端口三元组,当且仅当它们具有相同的方案、主机和端口时,这两个源是相同的。

确实,这不会让您从 JavaScript 浏览文件系统,但如果您考虑一下,这是一件好事。如果可以使用 JavaScript 浏览您的文件系统,那么您访问的任何网页都可能在您不知情的情况下窃取您的所有文件。然而,这与无法访问文件并不完全相同,多年来一直有一种访问 HTML 文件的方法,它看起来像这样:

<input type="file" id="inputField">

HTML5 允许您访问使用此元素选择的任何文件,而无需往返服务器。

var inputElement = document.getElementById("inputField");
inputElement.addEventListener("change", handleFiles, false);

function handleFiles() {
    var fileList = this.files;

    for (var i = 0, numFiles = files.length; i < numFiles; i++) {
        var file = files[i];
        //do stuff with file
    }
}

在这篇 MSN 文章中还有一些其他很好的示例,我从中窃取了上述(未经测试的)代码。

如果您使用HTML5 离线应用程序,您可以只访问一次 Web 服务器,然后关闭该服务器并继续使用该应用程序来编辑您通过上述方法附加到它的任何文件。

于 2012-04-25T23:07:14.360 回答