Диалоговые окна
deno desktop доступен начиная с Deno v2.9.0. Если у вас более ранняя версия, обновите Deno, чтобы использовать его.
Знакомые браузерные глобальные объекты prompt(), alert() и confirm() работают в приложениях deno desktop, но вместо чтения из терминала они показывают системные диалоговые окна.
Благодаря этому настольные приложения выглядят как родные без какого-либо кода для конкретной платформы, а API остается таким же, как для скрипта, выполняемого в браузере.
alert(message)
Показывает модальное диалоговое окно с кнопкой OK. Возвращает void.
alert("Save complete.");
Текущее окно является родительским: щелчок за пределами диалогового окна не закрывает его; пользователь должен нажать OK.
confirm(message)
Показывает модальное диалоговое окно с кнопками OK и Cancel. Возвращает boolean: true при нажатии OK, false при нажатии Cancel.
if (confirm("Discard unsaved changes?")) {
await closeDocument();
}
prompt(message, defaultValue?)
Показывает модальное диалоговое окно с текстовым полем и кнопками OK и Cancel. Возвращает введенную строку или null, если пользователь отменил ввод.
const name = prompt("New document name:", "Untitled");
if (name !== null) {
await createDocument(name);
}
Когда они срабатывают
Эти функции блокируют вызывающий код (синхронно) до ответа пользователя. Они выполняются в потоке среды выполнения Deno, а не в веб-представлении, поэтому не замораживают отображаемый интерфейс, но приостанавливают обработчик.
win.addEventListener("menuclick", (e) => {
if (e.detail.id === "delete") {
if (confirm("Really delete?")) {
// … do the deletion
}
}
});
При вызове со стороны веб-представления (через JavaScript внутри отображаемой страницы) вместо этого используются собственные диалоговые окна веб-представления: window.alert(), window.confirm() и window.prompt() — так, как их реализует браузер. Поведение аналогично: системное модальное окно, ограниченное этим веб-представлением.
Отличия от Deno в терминале
В обычном скрипте deno run эти функции читают данные из терминала или записывают их в него: prompt считывает строку из stdin, confirm принимает y / n. Такое поведение в терминале было бы незаметно в настольном приложении, поэтому deno desktop заменяет его системными диалоговыми окнами без каких-либо изменений в вашем коде.
Диалоговые окна выбора файлов и папок
Системные диалоговые окна выбора файлов и папок пока не доступны как полноценный API. Пока они не появятся, можно использовать два обходных решения:
-
Использовать
<input type="file">веб-представления. Веб-представление показывает системное средство выбора, а полученный объектFileможно передать через привязку для обработки на стороне Deno:<input id="f" type="file" accept=".json"> <script> document.getElementById("f").addEventListener("change", async (e) => { const file = e.target.files[0]; await bindings.handleFile(file.name, await file.arrayBuffer()); }); </script>win.bind("handleFile", async (name, bytes) => { await Deno.writeFile(name + ".bak", new Uint8Array(bytes)); }); -
Перетаскивать файлы в веб-представление. Перетащите файл на
<div>, прочитайте его с помощью File API и передайте байты через привязку.
API для системного выбора файлов есть в планах.
Уведомления
Для системных уведомлений предусмотрен отдельный API: стандартный конструктор Web Notification, вызываемый из кода на стороне Deno. См. раздел «Уведомления».
Буфер обмена
Отдельный API для буфера обмена пока не доступен. Пока используйте API Web Clipboard (navigator.clipboard.readText(), writeText()) со стороны веб-представления.
Последнее обновление:
© 2018–2025 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/runtime/desktop/dialogs