У меня есть нормальное приложение Electron с BrowserWindow, которое загружает файл:
win = new BrowserWindow(...);
win.loadURL(url.format({
pathname: path.resolve(__dirname, 'main.html'),
protocol: "file:",
slashes: true
}));
Я использую Electron-build для упаковки приложения. В большинстве случаев это работает нормально. Но иногда, когда я его собираю, как для Ma c, так и Windows, BrowserWindow не загружает файл и выдает ошибку в консоли:
Not allowed to load local resource: file:///path/to/MyApp.app/Contents/Resources/app.asar/dist/main.html
В сети инструментов разработчика На панели «1007» в разделе «Статус» написано (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» в пути. И путь указывает на действительный, читаемый файл.