【发布时间】:2020-06-16 05:36:12
【问题描述】:
我有一个普通的 Electron 应用程序,带有一个加载文件的 BrowserWindow:
win = new BrowserWindow(...);
win.loadURL(url.format({
pathname: path.resolve(__dirname, 'main.html'),
protocol: "file:",
slashes: true
}));
我正在使用 electron-build 来打包应用程序。大多数情况下,这工作正常。但有时当我为 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
那么为什么它不读取文件呢?我该如何调试?
不管怎样,我的代码在myproject/dist,在myproject/package.json,我有:
"build": {
"directories": {
"output": "out"
},
"files": [
"dist"
],
...
}
到目前为止,我正在使用最新版本的电子和电子生成器,但我在早期版本中遇到了问题。
我尝试使用文件路径而不是 URL:
win.loadFile(path.resolve(__dirname, 'main.html'));
但得到了相同的结果。
我也尝试过使用"asar": false。我得到了同样的错误,只是在路径中使用“app”而不是“app.asar”。并且路径指向一个有效的、可读的文件。
【问题讨论】: