实验性 Tauri Verso 集成
那么首先,什么是 Verso
?Verso
是一个基于 Servo
的浏览器,Servo
是一个用 Rust 编写的网页渲染引擎
我相信有很多人考虑过使用 Servo,但由于复杂的 API 而望而却步,最终放弃了,坦白说我就是其中之一,所以构建 Verso webview 的目标是使其足够易于理解和使用,以便人们能够真正开始尝试和使用它。
与其它浏览器相比,Servo 本身相对容易嵌入,但其 API 仍然过于底层,使用起来相当令人生畏。你可以查看在 Winit 中运行 Servo 的最小示例(请注意这甚至不是一个完全功能的示例):https://github.com/servo/servo/blob/8d39d7706aee50971e848a5e31fc6bfd7ef552c1/components/servo/examples/winit_minimal.rs
与此相比,Verso 的 API 看起来是这样的,更容易使用且符合人体工程学
use std::env::current_exe;use std::thread::sleep;use std::time::Duration;use url::Url;use verso::VersoBuilder;
fn main() { let versoview_path = current_exe().unwrap().parent().unwrap().join("versoview"); let controller = VersoBuilder::new() .with_panel(true) .maximized(true) .build(versoview_path, Url::parse("https://example.com").unwrap()); loop { sleep(Duration::MAX); }}
这并不是说 Servo 的 API 不好,因为它们需要支持更多用例,而我们只需将其用于使用 Tauri 构建应用程序。
那么,让我们来谈谈与 Tauri 的集成!
我们这次选择通过一个新的自定义运行时 tauri-runtime-verso
来集成 Verso 和 Tauri,这类似于我们默认的运行时 tauri-runtime-wry
。
通过这种方法,您可以轻松地切换运行时,并像通常那样使用 Tauri
use tauri_runtime_verso::{ INVOKE_SYSTEM_SCRIPTS, VersoRuntime, set_verso_path, set_verso_resource_directory,};
fn main() { // You need to set this to the path of the versoview executable // before creating any of the webview windows set_verso_path("../verso/target/debug/versoview"); // Set this to verso/servo's resources directory before creating any of the webview windows // this is optional but recommended, this directory will include very important things // like user agent stylesheet set_verso_resource_directory("../verso/resources"); tauri::Builder::<VersoRuntime>::new() // Make sure to do this or some of the commands will not work .invoke_system(INVOKE_SYSTEM_SCRIPTS.to_owned()) .run(tauri::generate_context!()) .unwrap();}
请注意,它目前还没有像 Tauri 生产中使用的现有后端那样功能丰富和强大,但它仍然有很多功能,我们已经在 https://github.com/versotile-org/tauri-runtime-verso/tree/main/examples/api 构建了一个展示它的示例。
- 我们拥有
tauri-cli
提供的所有功能 - 我们正在使用现代框架,这里是
React
- 我们有官方的日志和启动器插件,它们与您使用 Tauri 的其他后端时的工作方式完全相同。
- 窗口功能正常,包括大小、位置、最大化、最小化、关闭等。
Vite
的 CSS 热重载也同样有效data-tauri-drag-region
属性有效
目前,Verso 和 tauri-runtime-verso
仍在积极开发中,因此我们需要边走边看,但我们确实有下一步的计划。
发布一个易于使用的预构建 Verso 可执行文件,以帮助人们更快更容易地开始使用它,因为目前您需要自己编译 Verso 才能开始。
此外,如果可能的话,作为一项长期目标,我们希望有一个常青的共享 Verso,类似于 Windows 上的 WebView2,您可以将其放置在系统上,它会自动更新,并在多个应用程序之间共享,这样您就不必在应用程序内部附带浏览器,从而显著减小包大小。
我们目前只支持 Tauri 的一小部分功能,我们希望将其扩展以包含更多内容,我们目前计划支持窗口装饰、窗口标题和透明度。
目前 Servo 只能接受用户脚本目录在文档开始时运行,这还可以,但对于 Tauri 的用例,我们希望以编程方式完成此操作,而无需借助文件,因为这可能导致我们从不清理的临时文件残留。
我们几天前在 Servo 中合并了一个 PR,我们只需在 Verso 中使用它,然后在 tarui-runtime-verso
中使用它,所以这很快就会到来!
Tauri 很大程度上是基于底层 webview 库的假设构建的,因此目前很少有方法可以使用许多 Verso 特定的功能,例如,设置 verso 可执行文件路径和资源目录是通过全局变量完成的,这并不真正适用于窗口特定功能(例如设置圆角),因此我们希望接下来添加对这些功能的支持
最后,我们要感谢 NLNet 通过资助使这个项目成为可能!
© 2025 Tauri 贡献者。CC-BY / MIT