电子构建“不允许加载本地资源”但文件存在
Posted
技术标签:
【中文标题】电子构建“不允许加载本地资源”但文件存在【英文标题】:electron-build "not allowed to load local resource" but file exists 【发布时间】: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”。并且路径指向一个有效的、可读的文件。
【问题讨论】:
【参考方案1】:好的,想通了。我忘记了我用protocol.interceptFileProtocol
拦截了file:
协议。我的应用名称中有一个空格,所以当我调用callback
函数时,并没有用实际空格替换%20
,它找不到该文件。希望这对某人有所帮助。
【讨论】:
以上是关于电子构建“不允许加载本地资源”但文件存在的主要内容,如果未能解决你的问题,请参考以下文章
不允许在 chrome 上加载本地资源 - 错误,生产构建后 Angular 应用程序未运行
不允许加载本地资源图像文件:/// C:/ uploads / images