file-system-access-api - DOMException:当前上下文中的用户代理或平台不允许该请求
问题描述
尝试使用FileSystemFileHandlegetFile()
的方法访问文件时,可能会发生此错误:DOMException: The request is not allowed by the user agent or the platform in the current context.
此代码有效:
async function getTheFile() {
// open file picker
[fileHandle] = await window.showOpenFilePicker(pickerOpts);
// get file contents
const fileData = await fileHandle.getFile();
}
但是,如果您存储fileHandle
(例如使用 IndexedDB)以保持对文件的访问,即使在页面刷新后,它也将不起作用。刷新页面后,该getFile()
方法会抛出 DOMException 错误。
这是怎么回事?
解决方案
刷新页面(或关闭应用程序的所有选项卡)时,浏览器不再具有访问文件的权限。
有一个queryPermission()方法可用于FileSystemHandle
在尝试读取文件之前确定是否可以访问该文件。
来自有用的 web.dev 文章的示例:
async function verifyPermission(fileHandle, readWrite) {
const options = {};
if (readWrite) {
options.mode = 'readwrite';
}
// Check if permission was already granted. If so, return true.
if ((await fileHandle.queryPermission(options)) === 'granted') {
return true;
}
// Request permission. If the user grants permission, return true.
if ((await fileHandle.requestPermission(options)) === 'granted') {
return true;
}
// The user didn't grant permission, so return false.
return false;
}
一旦权限 ===,此函数将返回 true,或者如果权限为或granted
,则重新提示用户访问。denied
prompt
推荐阅读
- node.js - 在基本 Node/Express 应用程序中呈现“hello world”时出现问题
- firebase - Firestore 返回两个 newIndex 0
- angular - 无法解析服务参数
- arrays - 比较分配给 std_logic_vector 的整数值
- qt - 无法将双精度分配给 QQuickAnchorLine
- ios - Apple Watch 图标未显示在 iPhone 上的“Watch”应用程序中
- android - API 27 上的 Android 不同风格
- python - Matplotlib plt.plot_date() 如何根据第三列设置点的颜色
- wildfly - 如何配置 Wildfly 14 模块的安装和定位路径?
- python - 对于列表的每个元素,从不同的列表中找到最接近的日期