DirectoryReaderSync
非标准: 此功能是非标准的,也不在标准化轨道上。不要在面向 Web 的生产网站上使用它:它不会适用于所有用户。不同实现之间也可能存在很大的不兼容性,并且行为在将来可能会发生变化。
已弃用: 此功能不再推荐使用。虽然一些浏览器可能仍然支持它,但它可能已被从相关的 Web 标准中删除,可能正在被删除,或者可能仅出于兼容性目的而保留。避免使用它,并尽可能更新现有代码;请参阅本页底部 兼容性表 以指导您的决定。请注意,此功能可能随时停止工作。
DirectoryReaderSync
接口允许您读取目录中的条目。
警告: 此接口已弃用,不再在标准轨道上。请勿再使用它。 请改用 文件和目录条目 API。
基本概念
在调用此接口中唯一的 readEntries()
方法之前,请创建 DirectoryEntrySync
对象。但是 DirectoryEntrySync(以及 FileEntrySync
)不是可以在调用应用程序和 Web Worker 线程之间传递的数据类型。这不是什么大问题,因为您实际上并不需要让主应用程序和 Worker 线程看到相同的 JavaScript 对象;您只需要它们访问相同的文件即可。您可以通过传递一个 filesystem:
URL 列表(只是一些字符串)而不是条目列表来实现这一点。您还可以使用 filesystem:
URL 使用 resolveLocalFileSystemURL()
查找条目。这将使您返回到 DirectoryEntrySync(以及 FileEntrySync)对象。
示例
在以下来自 HTML5Rocks (web.dev) 的代码片段中,我们创建 Web Worker 并将数据从它传递到主应用程序。
// Taking care of the browser-specific prefixes.
window.resolveLocalFileSystemURL =
window.resolveLocalFileSystemURL || window.webkitResolveLocalFileSystemURL;
// Create web workers
const worker = new Worker("worker.js");
worker.onmessage = (e) => {
const urls = e.data.entries;
urls.forEach((url) => {
window.resolveLocalFileSystemURL(url, (fileEntry) => {
// Print out file's name.
console.log(fileEntry.name);
});
});
};
worker.postMessage({ cmd: "list" });
以下是在 worker.js
代码中获取目录内容。
// worker.js
// Taking care of the browser-specific prefixes.
self.requestFileSystemSync =
self.webkitRequestFileSystemSync || self.requestFileSystemSync;
// Global for holding the list of entry file system URLs.
const paths = [];
function getAllEntries(dirReader) {
const entries = dirReader.readEntries();
for (const entry of entries) {
// Stash this entry's filesystem in URL
paths.push(entry.toURL());
// If this is a directory, traverse.
if (entry.isDirectory) {
getAllEntries(entry.createReader());
}
}
}
// Forward the error to main app.
function onError(e) {
postMessage(`ERROR: ${e.toString()}`);
}
self.onmessage = (e) => {
const cmd = e.data.cmd;
// Ignore everything else except our 'list' command.
if (!cmd || cmd !== "list") {
return;
}
try {
const fs = requestFileSystemSync(TEMPORARY, 1024 * 1024 /*1MB*/);
getAllEntries(fs.root.createReader());
self.postMessage({ entries: paths });
} catch (e) {
onError(e);
}
};
方法
readEntries()
从特定目录返回条目列表。调用此方法,直到返回一个空数组为止。
语法
readEntries()
参数
无。
返回值
包含 FileEntrySync
和 DirectoryEntrySync
的数组。
异常
此方法可能会引发 DOMException,其代码如下
异常 | 描述 |
---|---|
NOT_FOUND_ERR |
目录不存在。 |
INVALID_STATE_ERR |
目录自首次调用 readEntries 处理以来已修改。 |
SECURITY_ERR |
浏览器确定查找元数据不安全。 |
规范
此功能不再属于任何规范。它不再有望成为标准。
浏览器兼容性
BCD 表仅在浏览器中加载