Электрон: невозможно получить доступ к диалогу до инициализации - PullRequest
0 голосов
/ 11 января 2020

У меня есть файл рендерера, единственная цель которого - открыть диалоговое окно для выбора файлов. Я пытался переписать это так много раз, и каждый раз я получаю новую ошибку. Что я делаю не так?

Точный код:

const { ipcRenderer, shell, remote } = require('electron')
const dialog = remote.dialog;

function openFileBrowser() {

    dialog.showOpenDialog(remote.getCurrentWindow(), {
        properties: ["openFile", "multiSelections"]
    }).then(result => {
        if (result.canceled === false) {
            console.log("Selected file paths:")
            console.log(result.filePaths)
        }
    }).catch(err => {
        console.log(err)
    })
}

Связан HTML:

        <div id="button-container">
            <nav>
                <ul class="buttons">
                    <li id="Open" onclick="openFileBrowser()">Proxies</li>
                </ul>
            </nav>
        </div>

Код ошибки

renderer.js:37 Uncaught ReferenceError: Cannot access 'dialog' before initialization
    at openFileBrowser (renderer.js:37)
    at HTMLLIElement.onclick (proxies.html:16)

Использование Электрон: "7.1.7"

1 Ответ

0 голосов
/ 12 января 2020

Начиная с Electron 6.0.0, функции dialog.showMessageBox(), dialog.showOpenDialog() и dialog.showSaveDialog() возвращают обещания и больше не принимают функции обратного вызова.

Есть синхронные аналоги dialog.showMessageBoxSync(), dialog.showOpenDialogSync() и dialog.showSaveDialogSync().

Проверьте следующий код примеры, показывающие асинхронный и синхронный способ отображения открытого диалога:

Асинхронный: dialog.showOpenDialog()

const remote = require("electron").remote
const dialog = remote.dialog

dialog.showOpenDialog(remote.getCurrentWindow(), {
    properties: ["openFile", "multiSelections"]
}).then(result => {
    if (result.canceled === false) {
        console.log("Selected file paths:")
        console.log(result.filePaths)
    }
}).catch(err => {
    console.log(err)
})

Синхронный: dialog.showOpenDialogSync()

const remote = require("electron").remote
const dialog = remote.dialog

let result = dialog.showOpenDialogSync(remote.getCurrentWindow(), {
    properties: ["openFile", "multiSelections"]
})
if (typeof result === "object") {
    console.log("Selected file paths:")
    console.log(result)
}

Обе версии При желании можно взять BrowserWindow в качестве первого элемента. Если он указан, диалоговое окно отображается в виде модального окна.

Для получения подробной информации об использовании см. Документацию для диалогового окна Electron.

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