我有一个 create-react-app 使用File System Access API读写本地文件。在浏览器(支持它的 Chrome 或 Edge)中运行时,读取和写入文件都可以正常工作。
当应用程序在 Electron 中运行时,读取工作正常但写入失败,原因如下:Uncaught (in promise) DOMException: The request is not allowed by the user agent or the platform in the current context.
我正在使用最新的 Electron (12.0.1),它使用与我的 Chrome 浏览器中相同的 Chromium (89.0.4389.82)。
下面是相关代码。requestPermission
调用后的控制台日志显示在浏览器和true
Electron中。granted
true
denied
我尝试webSecurity
在创建BrowserWindow
时禁用,禁用沙箱appendSwitch
但没有任何帮助。
有没有办法给 Electron 中的 Chromium 更多权限?
如果没有,我愿意在 Electron 中以不同的方式处理文件写入。在那种情况下,在代码中写什么来代替TODO
?请注意,因为它是一个 create-react-app,所以该fs
模块不可用。
export async function chooseAndReadFile() {
const fileHandle = await window.showOpenFilePicker().then((handles) => handles[0])
const file = await fileHandle.getFile()
const contents = await file.text()
return contents
}
export async function chooseAndWriteToFile(contents: string) {
const fileHandle = await window.showSaveFilePicker()
const descriptor: FileSystemHandlePermissionDescriptor = {
writable: true,
mode: "readwrite"
}
const permissionState = await fileHandle.requestPermission(descriptor)
console.log(window.isSecureContext)
console.log(permissionState)
const writable = await fileHandle.createWritable()
await writable.write(contents)
await writable.close()
}
let isElectron = require("is-electron")
export async function chooseAndWriteToFileUniversal(contents: string) {
if (isElectron()) {
// TODO: Do what???
} else {
chooseAndWriteToFile(contents)
}
}