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
# api-filesystemfilehandle-createsyncaccesshandle

ブラウザーの互換性

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
createSyncAccessHandle
mode option
ExperimentalNon-standard

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
No support
No support
Experimental. Expect behavior to change in the future.
Non-standard. Check cross-browser support before using.

関連情報