我目前正在重构一个应用程序以使用 OPFS 在 iPad 上保存图像,用于用户需要在没有 wi-fi 的地方拍照但将所有图像存储在 RAM 中的用例导致 iPad 崩溃。
我已经成功地创建了一个工作的 OPFS Worker,它可以在我的本地 Windows 机器上的 Chrome 和 Firefox 上工作,但我无法让它在测试 iPad 上工作。 [编辑] 它所做的是将 base64 文本发送给工作人员并将其保存为文本文件,我可以稍后检索。
我用来测试的iPad是iOS版本16.3.1.
我尝试开发的 iPad 是 iOS 版本 15.7.3.
据我所知,Safari iOS 从 15.2 开始就具有 OPFS 兼容性。
我能够将问题缩小到一个特定错误(通过 Web Inspector):
Unhandled Promise Rejection: UnknownError: invalid platform file handle
它引用了以下代码(在 Web Worker 中):
const root = await navigator.storage.getDirectory();
const saveHandle = await root.getFileHandle(input.fileName, { create: true });
const access = await saveHandle.createSyncAccessHandle(); //<-- ERROR
input.fileName
通常类似于 S0I0.txt
,基于我用于组织图像的标签系统。
文件是否由
getFileHandle()
创建似乎并不重要。
我无法从
Error
对象中提取任何其他东西。
我也无法在任何地方找到对这个特定错误的任何参考。它不在
web docs的
Exceptions
列表中。事实上,我发现的唯一引用是在 一张 2013 年的旧票上。
据我所知,前面的两个语句可以正常工作并生成正确的对象,分别是
FileSystemDirectoryHandle
和FileSystemFileHandle
。