Firefox 中的文件和目录条目 API 支持
最初的文件系统 API 是为了让浏览器实现对访问用户存储设备上的沙盒虚拟文件系统的支持而创建的。规范标准化工作在 2012 年就已停止,但到那时,Google Chrome 已经包含了自己的 API 实现。随着时间的推移,许多流行的网站和 Web 应用程序开始使用它,通常没有提供任何回退到标准 API 的方法,甚至没有在使用它之前检查 API 是否可用。Mozilla 则选择实现其他 API,这些 API 可以用来解决许多相同的问题,例如 IndexedDB; 有关更多见解,请参阅博文 为什么 Firefox 中没有文件系统 API?。
这导致许多流行的网站在除 Chrome 之外的其他浏览器上无法正常工作。因此,有人尝试创建一个规范,提供 Google API 的功能,并能达成共识。结果是 文件和目录条目 API。Chrome 提供的 API 的这个子集尚未完全规范;但是,出于 Web 兼容性原因,已决定在 Firefox 中实现 API 的一个子集;这一功能是在 Firefox 50 中引入的。
本文介绍了 Firefox 中的文件和目录条目 API 实现与其他实现或规范的差异。
Chrome 对规范的偏差
最大的兼容性问题仍然是 Chrome 仍在使用 API 中许多接口的旧名称,因为它们实现了一个相关但不同的规范
规范中的名称 | Google Chrome 中的名称 |
---|---|
FileSystemDirectoryEntry |
DirectoryEntry |
FileSystemDirectoryEntrySync |
DirectoryEntrySync |
FileSystemDirectoryReader |
DirectoryReader |
FileSystemDirectoryReaderSync |
DirectoryReaderSync |
FileSystemEntry |
Entry |
FileSystemEntrySync |
EntrySync |
FileSystemFileEntry |
FileEntry |
FileSystemFileEntrySync |
FileEntrySync |
请确保在您的代码中考虑这种情况,允许使用这两种名称。希望 Chrome 很快会更新以使用较新的名称!
为了确保您的代码在 Chrome 和其他浏览器中都能正常工作,您可以包含类似以下内容的代码
js
const FileSystemDirectoryEntry =
window.FileSystemDirectoryEntry || window.DirectoryEntry;
const FileSystemEntry = window.FileSystemEntry || window.Entry;
Firefox 中的限制
接下来,让我们看一下 Firefox 实现的 API 的限制。总的来说,这些限制可以概括如下
- 内容脚本无法创建文件系统或启动对文件系统的访问。目前,只有两种方法可以访问文件系统条目
<input>
元素,使用HTMLInputElement.webkitEntries
属性访问一个FileSystemEntry
对象数组,这些对象描述了您可以读取的文件系统条目。- 通过调用
DataTransferItem.webkitGetAsEntry
方法使用拖放,该方法允许您为拖放到放置区域的文件获取FileSystemFileEntry
或FileSystemDirectoryEntry
。
- Firefox 不支持
"filesystem:"
URL 方案。
另请参见
- 文件和目录条目 API
- 文件和目录条目 API 简介
- 文件和目录条目 API 规范
- 文件 API:目录和系统 的原始规范(通常称为“文件系统 API”);Google Chrome 是唯一实现此已弃用 API 的浏览器。