非标
此特征是非标准的,且不在标准轨道中。不要在面向 Web 的生产站点中使用它:它不适用于每个用户。实现之间可能存在大的不兼容性,且行为将来可能改变。
The original File System API was created to let browsers implement support for accessing a sandboxed virtual file system on the user's storage device. Work to standardize the specification was abandoned back in 2012, but by that point, Google Chrome included its own implementation of the API. Over time, a number of popular sites and Web applications came to use it, often without providing any means of falling back to standard APIs or even checking to be sure the API is available before using it. Mozilla instead opted to implement other APIs which can be used to solve many of the same problems, such as IndexedDB ; see the blog post Why no FileSystem API in Firefox? for more insights.
This has caused a number of popular web sites not to work properly on browsers other than Chrome. Because of that, an attempt was made to create a spec offering the features of Google's API which consensus could be reached on. The result was the 文件和目录条目 API . This subset of the API provided by Chrome is still not fully specified; however, for web compatibility reasons, it was decided to implement a subset of the API in Firefox; this was introduced in Firefox 50.
This article describes how the Firefox implementation of the File and Directory Entries API differs from other implementations and/or the specification.
The largest compatibility issue still remaining is that Chrome is still using older names for many of the interfaces in the API, since they implemented a related but different specification:
| 在规范中的名称 | 在 Google Chrome 中的名称 |
|---|---|
FileSystemDirectoryEntry
|
DirectoryEntry
|
FileSystemDirectoryEntrySync
|
DirectoryEntrySync
|
FileSystemDirectoryReader
|
DirectoryReader
|
FileSystemDirectoryReaderSync
|
DirectoryReaderSync
|
FileSystemEntry
|
Entry
|
FileSystemEntrySync
|
EntrySync
|
FileSystemFileEntry
|
FileEntry
|
FileSystemFileEntrySync
|
FileEntrySync
|
Be sure to account for this in your code by allowing for both names. Hopefully Chrome will be updated soon to use the newer names!
To ensure your code will work in both Chrome and other browsers, you can include code similar to the following:
var FileSystemDirectoryEntry = window.FileSystemDirectoryEntry || window.DirectoryEntry; var FileSystemEntry = window.FileSystemEntry || window.Entry;
Next, let's look at limitations of the Firefox implementation of the API. In broad strokes, those limitations can be summarized as follows:
<input>
element, using the
HTMLInputElement.webkitEntries
property to access an array of
FileSystemEntry
objects describing file system entries you can then read.
DataTransferItem.getAsEntry()
method, which lets you get a
FileSystemFileEntry
or
FileSystemDirectoryEntry
for files dropped on a drop zone.
LocalFileSystem.requestFileSystem()
method to get access to a specified local file system.
LocalFileSystem.resolveLocalFileSystemURL()
method isn't implemented.
Sync"
aren't available.
FileSystemFileEntry.createWriter()
method, used to create a
FileWriter
to handle writing to a file, is not implemented and will just treturn an error.
"filesystem:"
URL 方案。
FileError
FileException
FileHandle
FileRequest
FileSystemDirectoryEntry
FileSystemDirectoryEntrySync
FileSystemDirectoryReader
FileSystemDirectoryReaderSync
FileSystemEntry
FileSystemEntrySync
FileSystemFileEntry
FileSystemFileEntrySync
FileSystemFlags
FileSystem
FileSystemSync
HTMLInputElement
LocalFileSystem
LocalFileSystemSync
LockedFile
元数据