gpt4 book ai didi

Electron 构建 "not allowed to load local resource"但文件存在

转载 作者:行者123 更新时间:2023-12-03 12:41:29 24 4
gpt4 key购买 nike

我有一个普通的 Electron 应用程序,带有一个加载文件的 BrowserWindow:

win = new BrowserWindow(...);
win.loadURL(url.format({
pathname: path.resolve(__dirname, 'main.html'),
protocol: "file:",
slashes: true
}));

我正在使用 Electron 构建来打包应用程序。大多数情况下,这工作正常。但有时当我为 Mac 和 Windows 构建它时,BrowserWindow 不会加载文件,并在控制台中显示错误:
Not allowed to load local resource: file:///path/to/MyApp.app/Contents/Resources/app.asar/dist/main.html

在开发人员工具的网络面板中,它显示 (blocked:other)在状态下。

但与这里的许多类似问题不同,文件存在(在 asar 文件中)。我可以在打开窗口后立即执行此操作:
console.log(fs.readFileSync(path.resolve(__dirname, 'main.html'), { encoding: 'utf-8' }));

它将打印文件的内容。

我可以在预期的路径中看到 asar 中的文件:
$ asar list /path/to/MyApp.app/Contents/Resources/app.asar | grep main.html
/dist/main.html

那么为什么它不读取文件呢?我该如何调试呢?

对于它的值(value),我的代码在 myproject/dist ,并在 myproject/package.json , 我有:
  "build": {
"directories": {
"output": "out"
},
"files": [
"dist"
],
...
}

到目前为止,我正在使用最新版本的 Electron 和 Electron 生成器,但我在早期版本中遇到了问题。

我尝试使用文件路径而不是 URL:
win.loadFile(path.resolve(__dirname, 'main.html'));

但得到了相同的结果。

我也尝试使用 "asar": false .我得到了同样的错误,只是在路径中使用“app”而不是“app.asar”。并且路径指向一个有效的、可读的文件。

最佳答案

好的,想通了。我忘记了我正在拦截 file:protocol.interceptFileProtocol 的协议(protocol).我的应用名称中有一个空格,所以当我调用 callback 时功能,并没有取代 %20有一个实际空间,它找不到文件。希望这可以帮助某人。

关于 Electron 构建 "not allowed to load local resource"但文件存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60513993/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com