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 并将数据从它传递到主应用程序。

js
// 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 代码中获取目录内容。

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()

从特定目录返回条目列表。调用此方法,直到返回一个空数组为止。

语法

js
readEntries()
参数

无。

返回值

包含 FileEntrySyncDirectoryEntrySync 的数组。

异常

此方法可能会引发 DOMException,其代码如下

异常 描述
NOT_FOUND_ERR 目录不存在。
INVALID_STATE_ERR 目录自首次调用 readEntries 处理以来已修改。
SECURITY_ERR 浏览器确定查找元数据不安全。

规范

此功能不再属于任何规范。它不再有望成为标准。

浏览器兼容性

BCD 表仅在浏览器中加载

另请参见