электронная сборка "запрещено загружать локальный ресурс", но файл существует - PullRequest
0 голосов
/ 03 марта 2020

У меня есть нормальное приложение 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» в пути. И путь указывает на действительный, читаемый файл.

1 Ответ

0 голосов
/ 04 марта 2020

ОК, разобрался. Я забыл, что перехватывал протокол file: с protocol.interceptFileProtocol. В имени моего приложения есть пробел, поэтому, когда я вызвал функцию callback и не заменил %20 фактическим пробелом, он не смог найти файл. Надеюсь, это кому-нибудь поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...