Диалоговое окно HTML и модельное окно для Electron

Для замены быстрого () или другого диалогового окна используется простой HTML-тег.

Тег <dialog> HTML пока (апрель 2017) реализован только в Chrome. Так что не для использования в веб-приложении, но для Electron это другое...

В предыдущей статье мы видели, как заменить диалоговое окно prompt (), отсутствующее в разделе Electron, на BrowserWindows. Это работает в ipcMain, но было бы проще, если бы у нас было решение в ipcRenderer, так что прямо в коде интерфейса приложения. С помощью нового тега <dialog> можно создать модальное диалоговое окно в HTML.

Он всегда будет асинхронным, поскольку обработка не прекращается в точке создания диалогового окна. Но она блокирует взаимодействие с пользователем до тех пор, пока он не будет закрыт, что является модальным, что требуется, если лечение зависит от ответа пользователя.

Исходный код диалогового окна прост...

<dialog id="pDialog">
<label for="pAnswer" id="pLabel">Default label:</label>
<input id="pAnswer" type="text" value="">
<menu>
<button onclick="pDialog.close('')">Cancel</button>
<button onclick="pDialog.close(document.getElementById('pAnswer').value)">OK</button>
</menu>
</dialog>

Метод закрытого диалога возвращает значение, заданное программой. В данном случае, когда пользователь нажимает кнопку ОК, то возвращается то, что он ввел в текстовое поле ввода.

Когда пользователь нажимает кнопку «Отменить», возвращается пустая строка.

Затем определяется функция, которая заменит команду prompt ():

function promptDialog(question, cb) {
  var pDialog = document.getElementById('pDialog')

  var fe = function(e) {
    cb(pDialog.returnValue)
    pDialog.removeEventListener("close", fe)
  }  

  document.getElementById("pLabel").innerHTML = question  
  var x = pDialog.showModal()
  pDialog.addEventListener('close', fe)
}

Первый параметр - это формулировка из коробки, которая соответствует вопросу, на который пользователь должен дать ответ.
Второй параметр - это обратный вызов, необходимый, поскольку диалог является асинхронным и используется для возврата ответа.

Откроется поле с методом showModal (). Затем значение параметра метода close () извлекается с помощью прослушивателя и атрибута dialog returnValue.

Этот запрос замены используется с вызовом функции:

promptDialog("Mon propre libellé:", function(x) {
    if(x != '')
        alert(x)
})

Замените предупреждение (x) кодом, специфичным для вашего приложения...

Полный код демо доступен в архиве:

Чтобы запустить демонстрацию, введите: electron dialog.js

Этот код может быть обобщен для всевозможных диалоговых окон и фактически делает диалог. showMessageBox () устаревшим.

Диалоговое окно используется Advanced Explorer с версии 4.3 для функций Copy/Rename и Create folder.