Electron v8.1.1 - macOS 10.14.5
Я недавно обновил старый проект для использования Electron
8.1.1, и у меня возникла проблема с использованием модального showOpenDialog и затем открытие модального окна с результатом выбора файла.
Это работает первый раз, но если, после закрытия модального окна, я пытаюсь сделать это снова, это не удается - я получаю системный звуковой сигнал при попытке открыть средство выбора файлов (вызывая функцию showPDFPicker
ниже.
Я пытался отладить его, но он проникает глубоко в код Electron
и просто завершается без ошибок - просто система "подает звуковой сигнал". Это похоже на то, как будто модальное диалоговое окно никогда не закрывается.
Если я вызываю средство выбора файлов с null
вместо родительского окна, процедура работает, как и ожидалось:
dialog.showOpenDialog(null, options)
Кто-нибудь сталкивался с этим с Electron
v8 +? Раньше он работал в предыдущих версиях (afaik). Я попытался ввести setTimeOut
вызов, чтобы отложить открытие модального окна на 1000 мс, думая, что, возможно, произошла некоторая очистка. нужно время - бу Это не помогло.
Я создал тестовый проект и удалил весь остальной код, но все еще получаю ошибку.
Мне бы хотелось, чтобы средство выбора файлов showOpenDialog
было модальным, поэтому я Я надеюсь, что это проблема с моим кодом, а не ошибка в Electron
.
main. js
function showPDFPicker() {
var options = {
title: 'Select PDF',
properties: ['openFile'],
filters: [{ name: 'PDF', extensions: ['pdf'] }],
defaultPath: app.getPath("desktop")
}
dialog.showOpenDialog(mainWindow, options)
.then(result => {
if (result.canceled == false) {
filePickerCallback(result.filePaths)
}
}).catch(err => {
console.log('ERROR', err);
});
function filePickerCallback(filenames) {
if (filenames && filenames.length > 0) {
createPDFConvertWindow(filenames[0]);
}
}
}
function createPDFConvertWindow(pdfFile) {
pdfConvertWindow = new BrowserWindow({
parent: mainWindow,
modal: true,
show: false,
width: 800,
height: 600,
backgroundColor: '#cccccc',
center: true,
webPreferences: {
nodeIntegration: true
}
});
var theUrl = path.join(__dirname, 'app', 'import-dialog.html');
pdfConvertWindow.loadFile(theUrl);
pdfConvertWindow.on('ready-to-show', () => {
pdfConvertWindow.show();
})
}