FileSystemObserver: observe() 方法

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

实验性: 这是一项实验性技术
在生产中使用此技术之前,请仔细检查浏览器兼容性表格

非标准:此特性未标准化。我们不建议在生产环境中使用非标准特性,因为它们浏览器支持有限,并且可能会更改或被移除。但是,在没有标准选项的特定情况下,它们可以是合适的替代方案。

FileSystemObserver 接口的 observe() 方法要求观察器开始观察给定文件或目录的更改。

语法

js
observe(handle)
observe(handle, options)

参数

handle

表示要观察的文件或目录的文件系统条目的句柄。

options 可选

一个指定 observe() 调用选项的对象。它可以包含以下属性:

recursive

一个布尔值,指定是否要递归观察目录的更改。如果设置为 true,则会观察目录本身以及所有包含的子目录和文件的更改。如果设置为 false,则只观察目录本身和直接包含的文件的更改(即,子目录中的文件将被排除)。默认为 false

如果 handle 表示一个文件,则此属性无效。

返回值

一个 Promise,解析为 undefined

异常

NotFoundError DOMException

如果找不到 handle 所表示的文件或目录,则会抛出此错误。

示例

观察文件或目录

假设 FileSystemObserver 实例可用,您可以通过调用 observe() 开始观察文件系统条目的更改。

您可以观察用户可观察文件系统或 源私有文件系统 (OPFS) 中的文件或目录,方法是将 FileSystemFileHandleFileSystemDirectoryHandle 传递给 observe()。这些对象的实例可以通过例如使用 Window.showSaveFilePicker()Window.showDirectoryPicker() 请求用户选择文件或目录来获得。

js
// Observe a file
async function observeFile() {
  const fileHandle = await window.showSaveFilePicker();

  await observer.observe(fileHandle);
}

// Observe a directory
async function observeDirectory() {
  const directoryHandle = await window.showDirectoryPicker();

  await observer.observe(directoryHandle);
}

您还可以通过将 FileSystemSyncAccessHandle 传递给 observe() 来观察 OPFS 的更改。

js
// Observe an OPFS file system entry
async function observeOPFSFile() {
  const root = await navigator.storage.getDirectory();
  const draftHandle = await root.getFileHandle("draft.txt", { create: true });
  const syncHandle = await draftHandle.createSyncAccessHandle();

  await observer.observe(syncHandle);
}

递归观察目录

要递归观察目录,请调用 observe() 并将 recursive 选项设置为 true

js
// Observe a directory recursively
async function observeDirectory() {
  const directoryHandle = await window.showDirectoryPicker();

  await observer.observe(directoryHandle, { recursive: true });
}

规范

目前不是规范的一部分。请参阅 https://github.com/whatwg/fs/pull/165 以获取相关的规范 PR。

浏览器兼容性

另见