官方文档:Configuration | Tauri Apps
WindowConfig在tauri中是一个结构体,用于创建window窗口的类型规范。如果我们想自己使用WindowBuilder::from_config来创建一个窗口的话,就需要定义一个这样的类型传递进去才可以创建。定义的方式大概有下面四种,亲测都可以实现。
1.让tauri自己来转换
我们只需要在invoke中传递配置的时候,声明传递的参数类型为WindowConfig就可以了:
在传递的时候,直接传递js的对象就好了,使用的时候:
javascript 代码解读复制代码let _window = WindowBuilder::from_config(&handle, config)
.initialization_script(contents.as_str())
.build()
.unwrap();
2.从tauri.config.json里面获取
也可以使用app.config()从配置中拿到配置文件,然后找到config.tauri.windows.get(0)里面的第一个windows配置,再将配置传递进去就可以了:
注意:如果想修改配置,就需要clone一份出来
javascript 代码解读复制代码let config = app.config();
let windows_config = config.tauri.windows.get(0).unwrap();
let mut windows_config: WindowConfig = windows_config.clone();
windows_config.label = "submian".to_string();
windows_config.visible = true;
然后再传递到WindowBuilder::from_config里面:
3.手动创建一个
直接在rust文件中手动创建一个也是可以的:
javascript 代码解读复制代码
let windows_config = WindowConfig {
label: "custom_window".into(),
url: WindowUrl::App("https://juejin.cn/".into()), // 加载的 URL,可以是本地文件或远程网址
width: 800.0, // 窗口的宽度
height: 600.0, // 窗口的高度
resizable: true, // 是否允许调整窗口大小
fullscreen: false, // 是否全屏
transparent: false, // 是否透明
maximized: false, // 是否最大化
visible: true, // 是否可见
decorations: true, // 是否显示窗口边框
always_on_top: false, // 是否置顶
center: true, // 是否居中
theme: None, // 主题(如果需要可用 Some("light".into()) 或 Some("dark".into()))
..Default::default() // 填充剩余字段为默认值
};
4.从json字符串转换
最后一种方式就是从json字符串转换得来:
javascript 代码解读复制代码fn json_to_window_config(json: &str) -> Result<WindowConfig, Error> {
serde_json::from_str(json)
}
// 转换
let json = r#"{"label":"submain","url":"https://juejin.cn/","userAgent":"","fileDropEnabled":true,"center":false,"width":800,"height":600,"minWidth":null,"minHeight":null,"maxWidth":null,"maxHeight":null,"resizable":true,"maximizable":true,"minimizable":true,"closable":true,"title":"","fullscreen":false,"focus":false,"transparent":false,"maximized":false,"visible":true,"decorations":true,"alwaysOnTop":false,"contentProtected":false,"skipTaskbar":false,"titleBarStyle":"Visible","hiddenTitle":false,"acceptFirstMouse":false,"tabbingIdentifier":"","additionalBrowserArgs":""}"#;
match json_to_window_config(json) {
Ok(config) => {
println!("Parsed WindowConfig: {:?}", config);
let _main_window = WindowBuilder::from_config(
&app_handle,
config, // 从配置中读取
)
.build()
.unwrap();
}
Err(err) => {
eprintln!("Failed to parse JSON: {}", err);
}
}
总结的参考代码:
rust 代码解读复制代码// Prevents additional console window on Windows in release, DO NOT REMOVE!!
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
use serde_json::Error;
use tauri::{utils::config::WindowConfig, Menu, MenuItem, Submenu, WindowBuilder, WindowUrl};
fn json_to_window_config(json: &str) -> Result {
serde_json::from_str(json)
}
fn main() {
let edit_menu = Submenu::new(
"Edit",
Menu::new()
.add_native_item(MenuItem::Undo)
.add_native_item(MenuItem::Redo)
.add_native_item(MenuItem::Copy)
.add_native_item(MenuItem::Cut)
.add_native_item(MenuItem::Paste)
.add_native_item(MenuItem::SelectAll)
.add_native_item(MenuItem::CloseWindow)
.add_native_item(MenuItem::Quit),
);
tauri::Builder::default()
.setup(|app| {
let app_handle = app.handle();
// 1. 从配置中读取
// let config = app.config();
// let windows_config = config.tauri.windows.get(0).unwrap();
// let mut windows_config: WindowConfig = windows_config.clone();
// windows_config.label = "submian".to_string();
// windows_config.visible = true;
// // 2. 直接创建
// let windows_config = WindowConfig {
// label: "custom_window".into(),
// url: WindowUrl::App("https://juejin.cn/".into()), // 加载的 URL,可以是本地文件或远程网址
// width: 800.0, // 窗口的宽度
// height: 600.0, // 窗口的高度
// resizable: true, // 是否允许调整窗口大小
// fullscreen: false, // 是否全屏
// transparent: false, // 是否透明
// maximized: false, // 是否最大化
// visible: true, // 是否可见
// decorations: true, // 是否显示窗口边框
// always_on_top: false, // 是否置顶
// center: true, // 是否居中
// theme: None, // 主题(如果需要可用 Some("light".into()) 或 Some("dark".into()))
// ..Default::default() // 填充剩余字段为默认值
// };
// 3. 从 JSON 字符串创建
let json = r#"{"label":"submain","url":"https://juejin.cn/","userAgent":"","fileDropEnabled":true,"center":false,"width":800,"height":600,"minWidth":null,"minHeight":null,"maxWidth":null,"maxHeight":null,"resizable":true,"maximizable":true,"minimizable":true,"closable":true,"title":"","fullscreen":false,"focus":false,"transparent":false,"maximized":false,"visible":true,"decorations":true,"alwaysOnTop":false,"contentProtected":false,"skipTaskbar":false,"titleBarStyle":"Visible","hiddenTitle":false,"acceptFirstMouse":false,"tabbingIdentifier":"","additionalBrowserArgs":""}"#;
match json_to_window_config(json) {
Ok(config) => {
println!("Parsed WindowConfig: {:?}", config);
let _main_window = WindowBuilder::from_config(
&app_handle,
config, // 从配置中读取
)
.build()
.unwrap();
}
Err(err) => {
eprintln!("Failed to parse JSON: {}", err);
}
}
// 使用 from_config 创建主窗口
// let _main_window = WindowBuilder::from_config(
// &app_handle,
// windows_config, // 从配置中读取
// )
// .build()
// .unwrap();
// let _window = tauri::WindowBuilder::new(
// app,
// "PakePlus",
// tauri::WindowUrl::App("https://www.douyin.com".into()),
// )
// .initialization_script(include_str!("./extension/custom.js"))
// .title("抖音")
// .inner_size(1024.0, 768.0)
// .center()
// .user_agent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15")
// .build()?;
Ok(())
})
.menu(Menu::new().add_submenu(edit_menu))
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
评论记录:
回复评论: