你如何获得 showDirectoryPicker();从文件系统访问 Api 到不请求权限,即使您将 dirHandle 存储在 IndexDB 中

How do you get showDirectoryPicker(); from File System Access Api to not ask for permission even when you store dirHandle in IndexDB

当您调用 showDirectoryPicker() 时;你得到一个目录选择器。在您 select 之后,一个目录 chrome 将要求您授予查看该文件夹中文件的权限。

示例代码:

 let  dirHandle = showDirectoryPicker();

即使您已经授予访问权限,上述代码也会在您每次选择文件夹时请求权限。

您应该能够将 dirHandle 存储在 indexDB 中,这样如果用户已经授予权限,那么如果您使用 indexDB 中已经保存的句柄并且选择一个您已经授予权限的文件夹,它就不会再次请求权限.

问题是我正在保存和检索 dirHandle to/from indexDb,但它仍然要求获得我已经授予权限的文件夹的权限。

我认为应该有效的代码:注意——get 和 set 只是 shorthand 用于保存和加载到 indexDb

asyn function (){
 let dirHandle = await get("directory");
 dirHandle = await window.showDirectoryPicker();
  await set("directory", dirHandle);
}

所以在上面的代码中,我从 indexDb 中检索了 dirHand,然后将其设置为 dirHand = window.ShowDirectoryPicker。 window 将弹出,要求您 select 一个文件夹。如果我 select 一个我已经授予权限的文件夹,即使在页面刷新后也不应该再次请求权限。如果您不刷新页面,它可以正常工作。

我很确定这应该像这个示例项目中看到的那样工作 https://github.com/GoogleChromeLabs/text-editor/

这个项目来自这篇很好的文章,解释了如何实现这些结果,但显然它不适合我。请参阅文章 https://web.dev/file-system-access

您可以试用他的文本编辑器,演示即使在刷新页面后也不会要求您从先前授予的文件夹中获得权限。查看现场演示 https://googlechromelabs.github.io/text-editor/

示例转到“文件”>“打开”并选择一个文件。如果这是第一次打开此文件夹中的任何文件,它会询问您查看文件的权限。现在刷新页面并尝试打开同一个文件。它不会再次要求预先许可,您可以保存文件。它会在您第一次保存文件时询问权限,但不会在后续调用中询问。我看过他的代码,但我无法弄清楚我做错了什么。任何帮助是极大的赞赏。 TY

Chrome 总是请求许可,即使对于 IndexedDB 上的持久文件句柄也是如此:

初始提示:

从持久文件句柄重新打开文件后的提示: