alert (__ dirname) не производит никакого вывода в электронном приложении - PullRequest
0 голосов
/ 27 мая 2020

Я не получаю желаемого результата при запуске следующего электронного приложения, т.е. окна предупреждения, содержащего pwd в качестве вывода. Однако закомментированная строка внутри index. html, похоже, работает нормально. Консоль разработчика окна Chrome сообщает: «Uncaught ReferenceError: __dirname is not defined at HTMLButtonElement. ». Этот фрагмент дословно взят (за исключением строки с комментариями) из книги «Электрон в действии» Стива Кинни, издание 2019 года.

любые предложения?

пакет. json выглядит следующим образом

{
  "name": "bookmarker",
  "version": "1.0.0",
  "description": "electron app",
  "main": "./app/main.js",
  "scripts": {
    "start": "electron .",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Wasim Aftab",
  "license": "ISC",
  "dependencies": {
    "electron": "^9.0.0"
  }
}

main. js выглядит следующим образом

const {app, BrowserWindow} = require('electron');
let mainWindow = null;
app.on ('ready', () => {
    console.log('Hello, from electron');
    mainWindow = new BrowserWindow();
    mainWindow.webContents.loadFile(__dirname + '/index.html');
});

index. html выглядит следующим образом

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <meta http-equiv="Content-Security-Policy" content="
default-src 'self';
script-src 'self' 'unsafe-inline';
connect-src *">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>Bookmarker</title>
</head>

<body>
    <h1>Hello from Electron</h1>
    <p>
        <button class="alert">Current Directory</button>
    </p>
</body>
<script>
    const button = document.querySelector('.alert');
    button.addEventListener('click', () => {
        alert(__dirname);
        // alert(window.location.pathname.replace(/[^\\\/]*$/, ''));
    });
</script>

</html>

1 Ответ

1 голос
/ 27 мая 2020

__dirname - это концепция nodejs, она отсутствует в браузере.

Один из способов решения проблемы - установить nodeIntegration на true:

mainWindow = new BrowserWindow({
    webPreferences: {
        nodeIntegration: true
    }
});

Другой способ - использовать сценарий предварительной загрузки (nodeIntegration всегда включен для сценариев предварительной загрузки):

mainWindow = new BrowserWindow({
    webPreferences: {
        preload: (__dirname + "/preload.js")
    }
});

И затем в файле preload.js:

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