File and Directory Entries API
source link: https://wicg.github.io/entries-api/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Abstract
This specification documents web browser support for file
and directory upload by drag-and-drop operations. It introduces
types representing directories with methods for asynchronous
traversal, and extends HTMLInputElement
and DataTransferItem
[HTML].
Status of this document
This specification was published by the Web Platform Incubator Community Group. It is not a W3C Standard nor is it on the W3C Standards Track.
Please note that under the W3C Community Contributor License Agreement (CLA) there is a limited opt-out and other conditions apply.
Learn more about W3C Community and Business Groups.
Table of Contents
1. Goals
This specification documents the types and operations made available by web browsers to script when a hierarchy of files and directories are dragged and dropped onto a page or selected using form elements, or equivalent user actions.
This is heavily based upon earlier drafts of [file-system-api] which defines similar types in the context of a sandboxed file system, including operations for creating and modifying files and directories, but which has not been broadly adopted by web browsers.
The APIs described by this document was initially implemented in Google Chrome. Other browsers (at this time: Edge, Firefox and Safari) are starting to support subsets of Chrome’s APIs and behavior. The intent of this document is to specify the common subset to ensure that the implementations are interoperable.2. Concepts
2.1. Names and Paths
A name is a string which:
-
does not contain '/' (U+002F SOLIDUS)
-
does not contain NUL (U+0000)
-
does not contain '\' (U+005C REVERSE SOLIDUS)
-
is not '.' (U+002E FULL STOP)
-
is not '..' (U+002E FULL STOP, U+002E FULL STOP)
A path segment is a name, '.' (U+002E FULL STOP) or '..' (U+002E FULL STOP, U+002E FULL STOP).
A relative path is a string consisting of one or more path segments joined by '/' (U+002F SOLIDUS) that does not start with '/' (U+002F SOLIDUS).
An absolute path is a string consisting of '/' (U+002F SOLIDUS) followed by zero or more path segments joined by '/' (U+002F SOLIDUS).
A path is either a relative path or an absolute path.
A valid path is a USVString
which is a path.
2.2. Files and Directories
A file consists of binary data and a name (a non-empty name).
A directory consists of a name (a name) and an ordered list of members. Each member is either a file or a directory. Each member of a directory must have a distinct non-empty name.
A root directory is a directory that is not a member of a directory. A root directory's name is empty.
The parent of a file or directory is the directory it is a member of. A root directory has no parent.
EDITORIAL: Should directory be defined as a special type of file so that minimal changes are necessary in [HTML]? In most cases, the files and directories selected by the user will be presented by the API as if contained by a virtual root that does not exist as an entity in the actual native file system backing the interaction with the API.A file system consists of a name and a root which is an associated root
directory. The name of a file system is a USVString
which is implementation defined but is unique to the file system. A root directory is associated with exactly one file system.
2.3. Entries
An entry is either a file entry or a directory entry.
An entry has an name (a name) and a full path (an absolute path).
An entry also has a root, which is an associated root directory.
Entries are defined in terms of paths relative to a root directory to account for the fact that a native file system backing the interaction with the API could be modified asynchronously during operations such as enumerating the contents of a directory. Operations exposed on entries will produce errors in such cases where the paths no longer reference the same entity.The file system of an entry is the file system associated with the entry's root.
2.4. Directory Reader
A directory reader consists of an associated directory entry, an associated directory (initially null), a reading flag (initially unset), a done flag (initially unset), and a reader error (initially null).
3. Algorithms
To resolve a relative path with abspath (an absolute path) and path (an absolute path, a relative path, or the empty string), run the following steps which return an absolute path:
-
If path is an absolute path, return path.
-
Let abspath segments be the result of strictly splitting abspath on '/' (U+002F SOLIDUS).
The first string will be empty. -
Let path segments be the result of strictly splitting path on '/' (U+002F SOLIDUS).
-
For each segment in path segments, switch on segment:
empty string Continue. '.' (U+002E FULL STOP) Continue. '..' (U+002E FULL STOP, U+002E FULL STOP) Remove the last member of abspath segments unless it is the only member. Otherwise Append segment to abspath segments.
-
Return abspath segments joined by '/' (U+002F SOLIDUS).
To evaluate a path with directory (an root directory) and path (an absolute path), run the following steps which return a file, directory, or failure.
-
Let segments be the result of strictly splitting path on '/' (U+002F SOLIDUS).
-
Remove the first entry from segments.
Since path was an absolute path, this first entry will always be empty. -
For each segment in segments, switch on segment:
empty string Continue. '.' (U+002E FULL STOP) Continue. '..' (U+002E FULL STOP, U+002E FULL STOP) Let directory be directory’s parent, or directory if none. Otherwise Run these substeps:
4. The File
Interface
EDITORIAL:
This section should be merged into [FileAPI] once it is complete. partialinterfaceFile { readonlyattributeUSVString webkitRelativePath; };
The webkitRelativePath
getter steps are to return the file’s relative path, or the empty string if not specified.
5. HTML: Forms
EDITORIAL: This section should be merged into [HTML] once it is complete. Sections such as the steps to construct the form data set need to be extended to include thewebkitRelativePath
property. partialinterfaceHTMLInputElement { attributebooleanwebkitdirectory
; readonlyattributeFrozenArray<FileSystemEntry>webkitEntries
; };
When an input
element’s type
attribute is in the File
Upload state, the rules in this section apply.
The webkitdirectory
attribute is a boolean
attribute that indicates whether the user is to be allowed to select a
directory rather than a file or files. When specified, the behavior on
the selection of a directory is as if all files with that directory as
an ancestor were selected. In addition, the webkitRelativePath
property of each File
is set to a relative path starting from (and including) the selected directory
to the file.
documents/ to_upload/ a/ b/ 1.txt 2.txt 3.txt not_uploaded.txt
If the to_upload
directory was selected, then files
would include:
-
An entry with
name
== "1.txt
" andwebkitRelativePath
== "to_upload/a/b/1.txt
" -
An entry with
name
== "2.txt
" andwebkitRelativePath
== "to_upload/a/b/2.txt
" -
An entry with
name
== "3.txt
" andwebkitRelativePath
== "to_upload/a/3.txt
"
"image/*"
is specified
for the accept
attribute.
Inspecting the webkitRelativePath
properties after a
directory is selected with an input
element:
<inputid=btype=filewebkitdirectory>
document.querySelector('#b').addEventListener('change', e =>{for(file entry of e.target.files) console.log(file.name, file.webkitRelativePath);});
The webkitEntries
IDL attribute allows scripts to
access the element’s selected entries. On getting, if the IDL
attribute applies, it must return an array of FileSystemEntry
objects that represent the current selected files (including
directories, if permitted). If the IDL attribute does not apply, then
it must instead return null.
webkitEntries
:
<inputid=atype=filemultiple>
document.querySelector('#a').addEventListener('change', e =>{for(const entry of e.target.webkitEntries) handleEntry(entry);});INTEROP: In Chrome,
webkitEntries
is only populated as
the result of a drag-and-drop operation, not when the element is
clicked. Should we fix this so it is always populated? INTEROP:
In Chrome, if webkitdirectory
is specified on a HTMLInputElement
, webkitEntries
is not
populated; the files
collection and webkitRelativePath
properties must be used instead to
reconstruct the directory structure. Should we fix this so it is
always populated? 6. HTML: Drag and drop
EDITORIAL: This section should be merged into [HTML] once it is complete.During a drag-and-drop operation, file and directory items are associated with entries. Each entry is a member of a root directory unique to the drag data store.
Additionally, each directory item is represented in the drag
data store item list as a File. If it is accessed via getAsFile()
a zero-length File
is returned.
partialinterfaceDataTransferItem { FileSystemEntry? webkitGetAsEntry(); };
The webkitGetAsEntry()
method steps are:
-
If the
DataTransferItem
object is not in the read/write mode or the read-only mode, return null and abort these steps. -
If the drag data item kind is not File, then return null and abort these steps.
-
Return a new
FileSystemEntry
object representing the entry.
elem.addEventListener('dragover', e =>{// Prevent navigation. e.preventDefault();}); elem.addEventListener('drop', e =>{// Prevent navigation. e.preventDefault();// Process all of the items.for(const item of e.dataTransfer.items){// kind will be 'file' for file/directory entries.if(item.kind ==='file'){const entry = item.webkitGetAsEntry(); handleEntry(entry);}}});
7. Files and Directories
WEB COMPAT: The legacyTypeMismatchError
has been replaced in most
specifications by TypeError
, but the name differs. Is it
compatible to switch here as well? callbackErrorCallback
= undefined (DOMExceptionerr
);
An ErrorCallback
function is used for operations that may return an
error asynchronously.
7.1. The FileSystemEntry
Interface
[Exposed=Window] interfaceFileSystemEntry
{ readonlyattributeboolean isFile; readonlyattributeboolean isDirectory; readonlyattributeUSVString name; readonlyattributeUSVString fullPath; readonlyattributeFileSystem filesystem; undefined getParent(optionalFileSystemEntryCallbacksuccessCallback
, optionalErrorCallbackerrorCallback
); };
An FileSystemEntry
has an associated entry.
The isFile
getter steps are to return true if this is a file entry and false otherwise.
The isDirectory
getter steps are to return true if this is a directory entry and false otherwise.
The name
getter steps are to return this's name.
The fullPath
getter steps are to return this's full path.
The filesystem
getter steps are to return this's file system.
The getParent(successCallback, errorCallback)
method steps are:
-
Queue a task to perform the following substeps:
-
Let path be the result of running the steps to resolve a relative path with this's full path and '..'.
-
Let item be the result of running the steps to evaluate a path with this's root and path.
-
If item is failure, invoke errorCallback (if given) with a newly created "
NotFoundError
"DOMException
, and terminate these steps. -
Let entry be a new directory entry with item’s name as name and path as full path.
-
Invoke successCallback with a new
FileSystemDirectoryEntry
object associated with entry.
-
FileSystemEntry
was created.
Handling an entry:
function handleEntry(entry){ console.log('name: '+ entry.name); console.log('path: '+ entry.fullPath);if(entry.isFile){ console.log('... is a file');}elseif(entry.isDirectory){ console.log('... is a directory');}}Helper function to adapt
getParent()
for use with Promises [ECMA-262]:
function getParentAsPromise(entry){returnnew Promise((resolve, reject)=>{ entry.getParent(resolve, reject);});}
7.2. The FileSystemDirectoryEntry
Interface
[Exposed=Window] interfaceTheFileSystemDirectoryEntry
: FileSystemEntry { FileSystemDirectoryReader createReader(); undefined getFile(optionalUSVString?path
, optionalFileSystemFlagsoptions
= {}, optionalFileSystemEntryCallbacksuccessCallback
, optionalErrorCallbackerrorCallback
); undefined getDirectory(optionalUSVString?path
, optionalFileSystemFlagsoptions
= {}, optionalFileSystemEntryCallbacksuccessCallback
, optionalErrorCallbackerrorCallback
); }; dictionaryFileSystemFlags
{ booleancreate
= false; booleanexclusive
= false; }; callbackFileSystemEntryCallback
= undefined (FileSystemEntryentry
);
create
member of FileSystemFlags
and
the associated behavior are included for compatibility with existing
implementations, even though there is no useful behavior when the
flag is specified. Similarly, the exclusive
member is not explicitly referenced, but the binding behavior is
observable from script if an object with a getter is passed. A FileSystemDirectoryEntry
's associated entry is a directory
entry.
The createReader()
method steps are:
-
Let reader be a new directory reader associated with the directory entry's directory.
-
Return a newly created
FileSystemDirectoryReader
object associated with reader.
The getFile(path, options, successCallback, errorCallback)
method steps are:
-
Queue a task to run the following substeps:
-
If path is undefined or null let path be the empty string.
-
If path is not a valid path, invoke errorCallback (if given) with a newly created "
TypeMismatchError
"DOMException
, and terminate these steps. -
If options’s
create
member is true, invoke errorCallback (if given) with a newly created "SecurityError
"DOMException
, and terminate these steps. -
Let path be the result of running the steps to resolve a relative path with this's full path and path.
-
Let item be the result of running the steps to evaluate a path with this's root and path.
-
If item is failure, invoke errorCallback (if given) with a newly created "
NotFoundError
"DOMException
, and terminate these steps. -
If item is not a file, invoke errorCallback (if given) with a newly created "
TypeMismatchError
"DOMException
, and terminate these steps. -
Let entry be a new file entry with item’s name as name and path as full path.
-
Invoke successCallback (if given) with a new
FileSystemFileEntry
object associated with entry.
-
The getDirectory(path, options, successCallback, errorCallback)
method steps are:
-
Queue a task to run the following substeps:
-
If path is undefined or null let path be the empty string.
-
If path is not a valid path, invoke errorCallback (if given) with a newly created "
TypeMismatchError
"DOMException
, and terminate these steps. -
If options’s
create
member is true, invoke errorCallback (if given) with a newly created "SecurityError
"DOMException
, and terminate these steps. -
Let path be the result of running the steps to resolve a relative path with this's full path and path.
-
Let item be the result of running the steps to evaluate a path with this's root and path.
-
If item is failure, invoke errorCallback (if given) with a newly created "
NotFoundError
"DOMException
, and terminate these steps. -
If item is not a directory, invoke errorCallback (if given) with a newly created "
TypeMismatchError
"DOMException
, and terminate these steps. -
Let entry be a new directory entry with item’s name as name and path as full path.
-
invoke successCallback (if given) with a new
FileSystemDirectoryEntry
associated with entry.
-
getFile()
and getDirectory()
for use
with Promises [ECMA-262]:
function getFileAsPromise(entry, path){returnnew Promise((resolve, reject)=>{ entry.getFile(path,{}, resolve, reject);});}function getDirectoryAsPromise(entry, path){returnnew Promise((resolve, reject)=>{ entry.getDirectory(path,{}, resolve, reject);});}
7.3. The FileSystemDirectoryReader
Interface
[Exposed=Window] interfaceFileSystemDirectoryReader
{ undefinedreadEntries
(FileSystemEntriesCallbacksuccessCallback
, optionalErrorCallbackerrorCallback
); }; callbackFileSystemEntriesCallback
= undefined (sequence<FileSystemEntry>entries
);
A FileSystemDirectoryReader
has an associated directory reader.
The readEntries(successCallback, errorCallback)
method steps are:
-
If this's reading flag is set, queue a task to invoke errorCallback with a newly created "
InvalidStateError
"DOMException
, and terminate these steps. -
If this's reader error is not null, queue a task to invoke errorCallback (if given) with reader error, and terminate these steps.
-
If this's done flag is set, queue a task to invoke successCallback with an empty sequence and terminate these steps.
-
Set this's reading flag.
-
Queue a task to perform the following substeps:
-
Clear this's reading flag.
-
If dir is null, run these substeps:
-
Let dir be the result of running the steps to evaluate a path with this's root and full path.
-
If dir is failure, set this's reader error to a newly created "
NotFoundError
"DOMException
, invoke errorCallback (if given) with reader error, and terminate these steps.
-
-
Let entries be a non-zero number of entries from the dir that have not yet been produced by this directory reader, if any.
-
If the previous step failed (for example, the directory was deleted or permission is denied), then set this's reader error to an appropriate
DOMException
, invoke errorCallback (if given) with reader error, and terminate these steps. -
invoke successCallback with entries.
-
let reader = dirEntry.createReader();let doBatch =function(){// Read a batch. reader.readEntries(entries =>{// Complete?if(entries.length ===0){return;}// Process the batch. entries.forEach(handleEntry);// Read the next batch. doBatch();}, error => console.warn(error));};// Start reading doBatch();Helper function to adapt
FileSystemDirectoryReader
for use with Promises [ECMA-262]:
function getEntriesAsPromise(dirEntry){returnnew Promise((resolve, reject)=>{const result =[];const reader = dirEntry.createReader();const doBatch =()=>{ reader.readEntries(entries =>{if(entries.length >0){ entries.forEach(e => result.push(e)); doBatch();}else{ resolve(result);}}, reject);}; doBatch();});}Helper function to adapt
FileSystemDirectoryReader
for use with AsyncIterators [ECMA-262]:
asyncfunction* getEntriesAsAsyncIterator(dirEntry){const reader = dirEntry.createReader();const getNextBatch =()=>new Promise((resolve, reject)=>{ reader.readEntries(resolve, reject);});do{const entries =await getNextBatch();for(const entry of entries){yield entry;}}while(entries.length >0);}
This allows for ordered asynchronous traversal of a directory tree
using for-await-of
:
asyncfunction show(entry){ console.log(entry.fullPath);if(entry.isDirectory){forawait(const e of getEntriesAsAsyncIterator(entry))await show(e);}}
7.4. The FileSystemFileEntry
Interface
[Exposed=Window] interfaceFileSystemFileEntry
: FileSystemEntry { undefined file(FileCallbacksuccessCallback
, optionalErrorCallbackerrorCallback
); }; callbackFileCallback
= undefined (Filefile
);
A FileSystemFileEntry
's associated entry is a file entry.
The file(successCallback, errorCallback)
method steps are:
-
Queue a task to perform the following substeps:
-
Let item be the result of running the steps to evaluate a path with this's root and full path.
-
If item is failure, invoke errorCallback (if given) with a newly created "
NotFoundError
"DOMException
, and terminate these steps. -
If item is a directory, invoke errorCallback (if given) with a newly created "
TypeMismatchError
"DOMException
, and terminate these steps. -
invoke successCallback with a new
File
object representing item.
-
FileReader
:
function readFileEntry(entry){ entry.file(file =>{const reader =new FileReader(); reader.readAsText(file); reader.onerror = error => console.warn(error); reader.onload =()=>{ console.log(reader.result);};}, error => console.warn(error));}Helper function to adapt
file()
for use
with Promises [ECMA-262]:
function fileAsPromise(entry){returnnew Promise((resolve, reject)=>{ entry.file(resolve, reject);});}
7.5. The FileSystem
Interface
[Exposed=Window]
interfaceFileSystem
{
readonlyattributeUSVString name;
readonlyattributeFileSystemDirectoryEntry root;
};
A FileSystem
has an associated file system.
The name
getter steps are to return this's name.
The root
getter steps are to return a FileSystemDirectoryEntry
associated with this's root.
8. Acknowledgements
This specification is based heavily on the work of Eric Uhrhane in [file-system-api], which introduced the FileSystemEntry
types.
Thanks to Tab Atkins, Jr. for creating and maintaining Bikeshed, the specification authoring tool used to create this document.
And thanks to Ali Alabbas, Philip Jägenstedt, Marijn Kruisselbrink, Olli Pettay, and Kent Tamura for suggestions, reviews, and other feedback.
Conformance
Document conventions
Conformance requirements are expressed with a combination of descriptive assertions and RFC 2119 terminology. The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in the normative parts of this document are to be interpreted as described in RFC 2119. However, for readability, these words do not appear in all uppercase letters in this specification.
All of the text of this specification is normative except sections explicitly marked as non-normative, examples, and notes. [RFC2119]
Examples in this specification are introduced with the words “for example”
or are set apart from the normative text
with class="example"
,
like this:
This is an example of an informative example.
Informative notes begin with the word “Note”
and are set apart from the normative text
with class="note"
,
like this:
Note, this is an informative note.
Conformant Algorithms
Requirements phrased in the imperative as part of algorithms (such as "strip any leading space characters" or "return false and abort these steps") are to be interpreted with the meaning of the key word ("must", "should", "may", etc) used in introducing the algorithm.
Conformance requirements phrased as algorithms or specific steps can be implemented in any manner, so long as the end result is equivalent. In particular, the algorithms defined in this specification are intended to be easy to understand and are not intended to be performant. Implementers are encouraged to optimize.
Index
Terms defined by this specification
- absolute path, in §2.1
- create, in §7.2
- createReader(), in §7.2
- directory, in §2.2
- directory entry, in §2.3
- directory reader, in §2.4
- done flag, in §2.4
- entry, in §2.3
- ErrorCallback, in §7
- evaluate a path, in §3
- exclusive, in §7.2
- file, in §2.2
- FileCallback, in §7.4
- file entry, in §2.3
- file(successCallback), in §7.4
- file(successCallback, errorCallback), in §7.4
- file system
- FileSystem, in §7.5
- filesystem, in §7.1
- FileSystemDirectoryEntry, in §7.2
- FileSystemDirectoryReader, in §7.3
- FileSystemEntriesCallback, in §7.3
- FileSystemEntry, in §7.1
- FileSystemEntryCallback, in §7.2
- FileSystemFileEntry, in §7.4
- FileSystemFlags, in §7.2
- full path, in §2.3
- fullPath, in §7.1
- getDirectory(), in §7.2
- getDirectory(path), in §7.2
- getDirectory(path, options), in §7.2
- getDirectory(path, options, successCallback), in §7.2
- getDirectory(path, options, successCallback, errorCallback), in §7.2
- getFile(), in §7.2
- getFile(path), in §7.2
- getFile(path, options), in §7.2
- getFile(path, options, successCallback), in §7.2
- getFile(path, options, successCallback, errorCallback), in §7.2
- getParent(), in §7.1
- getParent(successCallback), in §7.1
- getParent(successCallback, errorCallback), in §7.1
- isDirectory, in §7.1
- isFile, in §7.1
- parent, in §2.2
- path, in §2.1
- path segment, in §2.1
- readEntries(successCallback), in §7.3
- readEntries(successCallback, errorCallback)
- reader error, in §2.4
- reading flag, in §2.4
- relative path, in §2.1
- resolve a relative path, in §3
- root directory, in §2.2
- valid path, in §2.1
- webkitdirectory, in §5
- webkitEntries, in §5
- webkitGetAsEntry(), in §6
- webkitRelativePath, in §4
Terms defined by reference
-
[ecma262] defines the following terms:
- asynciterator
- promise
-
[FileAPI] defines the following terms:
- FileReader
-
[HTML] defines the following terms:
- DataTransferItem
- HTMLInputElement
- accept
- drag data item kind
- drag data store
- drag data store item list
- file upload
- files
- getAsFile()
- input
- queue a task
- read-only mode
- read/write mode
- selected files
-
[INFRA] defines the following terms:
- strictly split
-
[WebIDL] defines the following terms:
- DOMException
- Exposed
- FrozenArray
- InvalidStateError
- NotFoundError
- SecurityError
- TypeError
- TypeMismatchError
- USVString
- boolean
- created
- invoke
- sequence
- undefined
References
Normative References
[FileAPI] Marijn Kruisselbrink; Arun Ranganathan. File API. 27 April 2021. WD. URL: https://www.w3.org/TR/FileAPI/ [HTML] Anne van Kesteren; et al. HTML Standard. Living Standard. URL: https://html.spec.whatwg.org/multipage/ [INFRA] Anne van Kesteren; Domenic Denicola. Infra Standard. Living Standard. URL: https://infra.spec.whatwg.org/ [RFC2119] S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. March 1997. Best Current Practice. URL: https://tools.ietf.org/html/rfc2119 [WebIDL] Boris Zbarsky. Web IDL. 15 December 2016. ED. URL: https://heycam.github.io/webidl/Informative References
[ECMA-262] ECMAScript Language Specification. URL: https://tc39.es/ecma262/ [FILE-SYSTEM-API] Eric Uhrhane. File API: Directories and System. 24 April 2014. NOTE. URL: https://www.w3.org/TR/file-system-api/IDL Index
partialinterfaceFile { readonlyattributeUSVString webkitRelativePath; }; partialinterfaceHTMLInputElement { attributebooleanwebkitdirectory
; readonlyattributeFrozenArray<FileSystemEntry>webkitEntries
; }; partialinterfaceDataTransferItem { FileSystemEntry? webkitGetAsEntry(); }; callbackErrorCallback
= undefined (DOMExceptionerr
); [Exposed=Window] interfaceFileSystemEntry
{ readonlyattributeboolean isFile; readonlyattributeboolean isDirectory; readonlyattributeUSVString name; readonlyattributeUSVString fullPath; readonlyattributeFileSystem filesystem; undefined getParent(optionalFileSystemEntryCallbacksuccessCallback
, optionalErrorCallbackerrorCallback
); }; [Exposed=Window] interfaceFileSystemDirectoryEntry
: FileSystemEntry { FileSystemDirectoryReader createReader(); undefined getFile(optionalUSVString?path
, optionalFileSystemFlagsoptions
= {}, optionalFileSystemEntryCallbacksuccessCallback
, optionalErrorCallbackerrorCallback
); undefined getDirectory(optionalUSVString?path
, optionalFileSystemFlagsoptions
= {}, optionalFileSystemEntryCallbacksuccessCallback
, optionalErrorCallbackerrorCallback
); }; dictionaryFileSystemFlags
{ booleancreate
= false; booleanexclusive
= false; }; callbackFileSystemEntryCallback
= undefined (FileSystemEntryentry
); [Exposed=Window] interfaceFileSystemDirectoryReader
{ undefinedreadEntries
(FileSystemEntriesCallbacksuccessCallback
, optionalErrorCallbackerrorCallback
); }; callbackFileSystemEntriesCallback
= undefined (sequence<FileSystemEntry>entries
); [Exposed=Window] interfaceFileSystemFileEntry
: FileSystemEntry { undefined file(FileCallbacksuccessCallback
, optionalErrorCallbackerrorCallback
); }; callbackFileCallback
= undefined (Filefile
); [Exposed=Window] interfaceFileSystem
{ readonlyattributeUSVString name; readonlyattributeFileSystemDirectoryEntry root; };
Issues Index
webkitRelativePath
property. ↵ webkitEntries
is only populated as
the result of a drag-and-drop operation, not when the element is
clicked. Should we fix this so it is always populated? ↵ webkitdirectory
is specified on a HTMLInputElement
, webkitEntries
is not
populated; the files
collection and webkitRelativePath
properties must be used instead to
reconstruct the directory structure. Should we fix this so it is
always populated? ↵ TypeMismatchError
has been replaced in most
specifications by TypeError
, but the name differs. Is it
compatible to switch here as well? ↵ Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK