三、Tauri 使用(各种设置)
lllq33 2024-10-25 11:33:01 阅读 74
1.开启所有API使用
<code>{
"tauri": {
"allowlist": {
"all": true,
}
}
}
2.关闭鼠标右键
window.addEventListener('contextmenu', (e) => e.preventDefault(), false);
// 在生成环境关闭鼠标右键
if (import.meta.env.MODE === "production") {
window.addEventListener("contextmenu", (e) => e.preventDefault(), false);
}
3.修改图标
①在项目根目录下放入要替换的图标,重命名为 app-icon.png
②运行
pnpm tauri icon
4.多窗口
注意:窗口标签必须是唯一的,并且可以在运行时用于访问窗口实例。此处使用的是在 JavaScript 中创建窗口
免责声明窗口使用创建新窗口的方法创建出来的,使用时直接导入即可
import { WebviewWindow } from "@tauri-apps/api/window";
// 创建新窗口
export const createWin = (options: any) => {
const webview = new WebviewWindow(options.label, {
url: options.url, // 窗口的URL
title: options.title, // 窗口的标题
width: options.width, // 初始宽度 (number)
height: options.height, // 初始高度 (number)
minWidth: options.minWidth, // 窗口的最小宽度 (number)
minHeight: options.minHeight, // 窗口的最小高度 (number)
maxWidth: options.maxWidth, // 窗口的最大宽度 (number)
maxHeight: options.maxHeight, // 窗口的最大高度 (number)
resizable: options.resizable, // 窗口是否可调整大小 (boolean)
x: options.x, // 窗口左上角的水平位置 (number)
y: options.y, // 窗口左上角的垂直位置 (number)
center: options.center, // 是否位于屏幕中央显示窗口 (boolean)
alwaysOnTop: options.alwaysOnTop, // 窗口是否应始终位于其他窗口之上 (boolean)
fullscreen: options.fullscreen, // 窗口是否应全屏显示 (boolean)
decorations: options.decorations, // 窗口是否应具有装饰边框和条 (boolean)
fileDropEnabled: options.fileDropEnabled, // 窗口是否应接收文件拖放 (boolean)
skipTaskbar: options.skipTaskbar, // 是否将窗口添加到任务栏 (boolean)
contentProtected: options.contentProtected, // 防止窗口内容被其他应用程序捕获 (boolean)
focus: options.focus, // 窗口是否应自动获取焦点 (boolean)
visible: options.visible, // 窗口是否应可见 (boolean)
});
// 窗口创建成功触发
webview.once("tauri://created", function () {
console.log(options.title + "创建成功!!!");
});
// 窗口创建失败触发
webview.once("tauri://error", function (e) {
console.log(options.title + "创建失败!!!", e);
});
};
// 关闭窗口
export const closeWin = (label: string) => {
const win = WebviewWindow.getByLabel(label);
if (win) {
win.close();
} else {
console.error(`无法找到标签为 ${label} 的窗口`);
}
};
// 隐藏窗口
export const hideWin = (label: string) => {
const win = WebviewWindow.getByLabel(label);
if (win) {
win.hide();
} else {
console.error(`无法找到标签为 ${label} 的窗口`);
}
};
// 显示窗口
export const showWin = (label: string) => {
const win = WebviewWindow.getByLabel(label);
if (win) {
win.show();
} else {
console.error(`无法找到标签为 ${label} 的窗口`);
}
};
// 免责声明窗口
export const disclaimerWin = () => {
createWin({
label: "Disclaimer",
title: "免责声明",
url: "/disclaimer",
center: true,
width: 800,
height: 740,
resizable: false,
});
};
5.初始屏幕
如果网页需要一些时间来加载,或者你需要在显示主窗口之前在 Rust 中运行初始化过程,那么启动画面可以改善用户的加载体验。
第一种方法:
①首先需要隐藏主窗口 tauri.config.json
"windows": [
{
"fullscreen": false,
"resizable": true,
"title": "有米TG营销助理",
"center": true,
"width": 600,
"height": 400,
"minWidth": 600,
"minHeight": 400,
"visible": false
}
]
②创建初始屏幕,直接在tauri,config.json中创建,如下
"windows": [
{
"title": "Tauri App",
"width": 800,
"height": 600,
"resizable": true,
"fullscreen": false,
"visible": false
},
// Add the splashscreen window
{
"width": 400,
"height": 200,
"decorations": false,
"url": "splashscreen.html",
"label": "splashscreen"
}
]
③等待网页
use tauri::Manager;
// 创建命令:
// 该命令必须是异步的,以便它不会在主线程上运行。
#[tauri::command]
async fn close_splashscreen(window: tauri::Window) {
// 关闭初始屏幕
if let Some(splashscreen) = window.get_window("splashscreen") {
splashscreen.close().unwrap();
}
// 显示主窗口
window.get_window("main").unwrap().show().unwrap();
}
// 注册命令:
fn main() {
tauri::Builder::default()
// Add this line
.invoke_handler(tauri::generate_handler![close_splashscreen])
.run(tauri::generate_context!())
.expect("failed to run app");
}
④使用
import { invoke } from '@tauri-apps/api/tauri'
document.addEventListener('DOMContentLoaded', () => {
// 这将等待窗口加载,但你可以在您想要的任何触发器上运行此函数
invoke('close_splashscreen')
})
第二种方法:
①首先需要隐藏主窗口 tauri.config.json
"windows": [
{
"fullscreen": false,
"resizable": true,
"title": "有米TG营销助理",
"center": true,
"width": 600,
"height": 400,
"minWidth": 600,
"minHeight": 400,
"visible": false
}
]
②使用创建多窗口,在页面调用创建多窗口的方法
disclaimerWin();
③使用定时器或者点击事件关闭初始屏幕,显示主窗口
// 关闭当前窗口
closeWin("Disclaimer");
// 显示主窗口
showWin("main");
6.打开文件/目录选择对话框
由于使用的是axios,上传文件无法完成,就是用的该方法,将文件传递给后端
options | 类型 | 描述 |
---|---|---|
defaultPath | string | 初始目录或文件路径 |
directory | boolean | 对话框是否为文件选择 |
filters | DialogFilter[] | 对话框的筛选 |
multiple | boolean | 是否允许多个选择 |
recursive | boolean | 如果目录为 true,则指示以后将递归地读取它。定义范围上是否允许子目录。 |
title | string | 对话窗口标题 |
import { open } from '@tauri-apps/api/dialog';
const selected = await open({
multiple: true,
filters: [{
name: 'Image',
extensions: ['png', 'jpeg']
}]
});
if (Array.isArray(selected)) {
// 用户选择多个文件
} else if (selected === null) {
// 用户取消文件选择
} else {
// 用户选择一个文件
}
7.修改窗口
登录成功需要修改窗口可以使用下面的方法
import { appWindow, LogicalSize } from '@tauri-apps/api/window';
await appWindow.setResizable(true); // 是否可以更改该大小
await appWindow.setSize(new LogicalSize(1920, 1080)); // 窗口重置宽高
await appWindow.setMinSize(new LogicalSize(1920, 1080)); // 窗口重置最小宽高
await appWindow.center(); // 窗口居中
8.退出窗口操作
import { exit } from '@tauri-apps/api/process';
await exit(0);
上一篇: org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded
下一篇: 牛客网webserver面试经验
本文标签
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。