FileSystemFileHandle.createSyncAccessHandle()

Baseline 2023

Newly available

Since March 2023, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.

安全なコンテキスト用: この機能は一部またはすべての対応しているブラウザーにおいて、安全なコンテキスト (HTTPS) でのみ利用できます。

FileSystemFileHandle インターフェイスの createSyncAccessHandle() メソッドは、同期式でファイルを読み書きできる FileSystemSyncAccessHandle オブジェクトで解決する Promise を返します。 このメソッドは同期式であることによりパフォーマンス上有利ですが、それ用の Web Workers によるオリジンプライベートファイルシステム内のファイルの操作にのみ用いることができます。

FileSystemSyncAccessHandle を作成すると、ファイルハンドルに対応するファイルの排他的ロックを取得します。これにより、作成したアクセスハンドルを閉じるまで、同じファイルについて FileSystemSyncAccessHandleFileSystemWritableFileStream を作成することはできなくなります。

構文

js
createSyncAccessHandle()

引数

なし

返値

FileSystemSyncAccessHandle オブジェクトで解決する Promise を返します。

例外

InvalidStateError DOMException

FileSystemSyncAccessHandle オブジェクトがオリジンプライベートファイルシステム内のファイルを表していないとき投げられます、

NoModificationAllowedError DOMException

ブラウザーがファイルハンドルに対応するファイルのロックを取得できないとき投げられます。

NotAllowedError DOMException

API レベルで許可されていないとき投げられます。(すなわち、FileSystemHandle.requestPermission が必要です)

以下の非同期のイベントハンドラーは、Web Worker 内にあります。そのうちのこの部分は、同期式ファイルアクセスハンドルを作成します。

js
onmessage = async (e) => {
  // メインスクリプトから送られた処理対象のメッセージを取得する
  const message = e.data;

  // draft ファイルへのハンドルを取得する
  const root = await navigator.storage.getDirectory();
  const draftHandle = await root.getFileHandle("draft.txt", { create: true });
  // 同期式アクセスハンドルを取得する
  const accessHandle = await draftHandle.createSyncAccessHandle();

  // …

  // 完了したら、常に FileSystemSyncAccessHandle を閉じる
  accessHandle.close();
};

仕様書

Specification
File System Standard
# api-filesystemfilehandle-createsyncaccesshandle

ブラウザーの互換性

BCD tables only load in the browser

関連情報