首页 > 解决方案 > 你如何获得 showDirectoryPicker(); 从文件系统访问 Api 到即使您将 dirHandle 存储在 IndexDB 中也不会请求许可

问题描述

当你调用 showDirectoryPicker(); 你得到一个目录选择器。选择目录后,chrome 会询问您查看该文件夹中文件的权限。

示例代码:

 let  dirHandle = showDirectoryPicker();

上面的代码会在您每次选择文件夹时询问权限,即使您已经授予了访问权限。

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

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

我认为应该可以工作的代码:注意——get 和 set 只是保存和加载到 indexDb 的简写

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

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

我很确定这应该可以在这个示例项目中看到https://github.com/GoogleChromeLabs/text-editor/

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

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

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

标签: javascriptfile-system-access-api

解决方案


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

初始提示:

在此处输入图像描述

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

在此处输入图像描述


推荐阅读