电子构建“不允许加载本地资源”但文件存在

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,它找不到该文件。希望这对某人有所帮助。

【讨论】:

以上是关于电子构建“不允许加载本地资源”但文件存在的主要内容,如果未能解决你的问题,请参考以下文章

不允许加载本地资源

Xamarin 不允许加载本地资源文件

不允许在 chrome 上加载本地资源 - 错误,生产构建后 Angular 应用程序未运行

不允许加载本地资源图像文件:/// C:/ uploads / images

Internet 浏览器中的文件 URL“不允许加载本地资源”

Internet 浏览器中的文件 URL“不允许加载本地资源”