操作をブロックするモーダルダイアログにする

Recipe ID: dlg-012

「モーダル(Modal)」とは、そのウィンドウやダイアログが閉じられるまで、親画面を操作できなくする仕組みのことです。

前提条件

プラグインの追加

ダイアログ機能を利用するには dialog プラグインが必要です。

npm run tauri add dialog

src-tauri/src/lib.rs.plugin(tauri_plugin_dialog::init()) が追加されていることを確認してください。

Permissions (権限) の設定

src-tauri/capabilities/default.jsoncore:default 権限を追加します。

{
  "permissions": [
    ...,
    "dialog:default"
  ]
}

1. フロントエンドから作成する (TypeScript)

ネイティブダイアログを利用する

@tauri-apps/plugin-dialog の関数はデフォルトでモーダルです。

import { message } from '@tauri-apps/plugin-dialog';

// この処理が完了するまでブロックされます
await message('操作できません', { title: 'Modal' });

HTML5 dialog を利用する

showModal() を使用します。

const dialog = document.getElementById('my-dialog') as HTMLDialogElement;
dialog.showModal(); // 背景操作不可

別ウィンドウをモーダルにする(高度)

parent オプションを指定してウィンドウを作成します。

import { WebviewWindow } from '@tauri-apps/api/webviewWindow';
import { getCurrentWindow } from '@tauri-apps/api/window';

const appWindow = getCurrentWindow();

// 新しいウィンドウを、現在のウィンドウの子として作成
const modal = new WebviewWindow('modal', {
  url: 'modal.html',
  parent: appWindow.label,
  alwaysOnTop: true,
});

補足

  • ネイティブダイアログ: 最も簡単で確実なブロック手段です。
  • <dialog>: デザインをカスタマイズしたい場合に最適です。