FileSystemObserver:observe() 方法
非标准: 该特性是非标准的,请尽量不要在生产环境中使用它!
FileSystemObserver
接口的 observe()
方法要求观察器开始观察给定文件或目录的变化。
语法
observe(handle)
observe(handle, options)
参数
handle
-
表示要观察的文件或目录的文件系统条目的句柄。
- 对于用户可观察的文件系统,这可以是
FileSystemFileHandle
或FileSystemDirectoryHandle
。 - 对于源私有文件系统(OPFS),它可以是
FileSystemFileHandle
、FileSystemDirectoryHandle
或FileSystemSyncAccessHandle
。
- 对于用户可观察的文件系统,这可以是
options
可选-
指定
observe()
调用的选项的对象。它可以包含以下属性:recursive
-
一个布尔值,指定是否要递归观察目录的更改。如果设置为
true
,则会观察目录本身及其包含的所有子目录和文件的更改。如果设置为false
,则仅观察目录本身及其直接包含的文件的更改(即,不包括子目录中的文件)。默认为false
。如果handle
表示文件,则此属性无效。
返回值
异常
NotFoundError
DOMException
-
如果找不到
handle
所表示的文件或目录,则抛出此异常。
示例
观察文件或目录
假设 FileSystemObserver
实例可用,你可以通过调用 observe()
开始观察文件系统条目的变化。
你可以通过向 observe()
传入 FileSystemFileHandle
或 FileSystemDirectoryHandle
来观察用户可观察文件系统或源私有文件系统(OPFS)中的文件或目录。例如,当要求用户使用 Window.showSaveFilePicker()
或 Window.showDirectoryPicker()
选择文件或目录时,可以返回这些对象的实例:
// 观察文件
async function observeFile() {
const fileHandle = await window.showSaveFilePicker();
await observer.observe(fileHandle);
}
// 观察目录
async function observeDirectory() {
const directoryHandle = await window.showDirectoryPicker();
await observer.observe(directoryHandle);
}
你还可以通过将 FileSystemSyncAccessHandle
传递给 observe()
来观察 OPFS 的变化:
// 观察 OPFS 文件系统条目
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
:
// 递归观察目录
async function observeDirectory() {
const directoryHandle = await window.showDirectoryPicker();
await observer.observe(directoryHandle, { recursive: true });
}
规范
目前不属于任何规范。相关规范 PR 请参阅 https://github.com/whatwg/fs/pull/165。
浏览器兼容性
参见
- 文件系统 API
- developer.chrome.com 上的文件系统观察器 API 源试用(2024)