Использование модального showOpenDialog и последующее открытие модального окна работает только один раз - PullRequest
1 голос
/ 23 марта 2020

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();
    })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...