109 个版本 (41 个重大更新)
0.42.0 | 2024年8月16日 |
---|---|
0.41.0 | 2024年6月12日 |
0.40.1 | 2024年6月1日 |
0.38.2 | 2024年3月25日 |
0.6.1 | 2021年3月21日 |
#4 in GUI
168,294 每月下载量
用于 93 个 crate (33 个直接使用)
345KB
7.5K SLoC
支持所有主流桌面平台(如 Windows、macOS 和 Linux)的跨平台 WebView 渲染库。
概述
WRY 连接每个平台上的网络引擎,并提供易于使用且统一的接口来渲染 WebView。WebView 需要运行的事件循环和实现 HasWindowHandle
的窗口类型,或者如果你需要支持 X11 和 Wayland,则需要一个 gtk 容器小部件。你可以使用 tao
或 winit
这样的窗口库。
使用方法
创建窗口并浏览网站的最低示例如下
fn main() -> wry::Result<()> {
use tao::{
event::{Event, StartCause, WindowEvent},
event_loop::{ControlFlow, EventLoop},
window::WindowBuilder,
};
use wry::WebViewBuilder;
let event_loop = EventLoop::new();
let window = WindowBuilder::new()
.with_title("Hello World")
.build(&event_loop)
.unwrap();
let _webview = WebViewBuilder::new(&window)
.with_url("https://tauri.org.cn")
.build()?;
event_loop.run(move |event, _, control_flow| {
*control_flow = ControlFlow::Wait;
match event {
Event::NewEvents(StartCause::Init) => println!("Wry has started!"),
Event::WindowEvent {
event: WindowEvent::CloseRequested,
..
} => *control_flow = ControlFlow::Exit,
_ => (),
}
});
}
在 examples
也有更多示例,你可以输入以下命令尝试它们
cargo run --example multiwindow
有关更多信息,请参阅下面的文档。
文档
平台特定说明
以下是每个平台使用的底层网络引擎以及你可能需要安装的一些依赖项。
Linux
Wry 还需要 WebKitGTK 用于 WebView。因此,请确保以下软件包已安装
Arch Linux / Manjaro
sudo pacman -S webkit2gtk-4.1
可以从 Arch User Repository (AUR) 安装 libayatana-indicator
软件包。
Debian / Ubuntu
sudo apt install libwebkit2gtk-4.1-dev
Fedora
sudo dnf install gtk3-devel webkit2gtk4.1-devel
Fedora 尚未提供 Ayatana 软件包,因此你需要使用 GTK,请参阅 功能标志文档。
macOS
WebKit 是 macOS 的本地库,所以一切应该都没问题。
如果您使用osxcross为macOS进行交叉编译并遇到类似 Class with name WKWebViewConfiguration could not be found
的运行时崩溃,那么可能是 WebKit.framework
链接不正确。要解决这个问题,请设置环境变量 RUSTFLAGS
RUSTFLAGS="-l framework=WebKit" cargo build --target=x86_64-apple-darwin --release
Windows
Microsoft Edge Chromium提供的WebView2被使用。因此,wry支持Windows 7、8、10和11。
Android / iOS
Wry通过cargo-mobile2
CLI创建模板项目来支持移动设备。如果您想尝试或修改它,请参阅MOBILE.md。
如果您想自己创建Android项目,应用程序需要满足一些要求
-
您需要设置一些环境变量,这些变量将用于生成必要的kotlin文件,这些文件需要包含在您的Android应用程序中,以便wry能够正常运行
WRY_ANDROID_PACKAGE
:这是您的android项目和app名称的反向域名,例如:com.wry.example.wry_app
WRY_ANDROID_LIBRARY
:例如,如果您的cargo项目有一个名为wry_app
的lib名称,它将生成libwry_app.so
,因此您将此环境变量设置为wry_app
WRY_ANDROID_KOTLIN_FILES_OUT_DIR
:例如,path/to/app/src/main/kotlin/com/wry/example
-
您的main Android Activity需要继承
AppCompatActivity
,最好使用生成的WryActivity
或继承它。 -
您的Rust应用程序需要调用
wry::android_setup
函数来设置创建webview所需的逻辑。 -
您的Rust应用程序需要调用
wry::android_binding!
宏来设置WryActivity
和其他位置将调用的JNI函数。
建议使用tao
crate,因为它提供了与 wry
的最佳兼容性。
#[cfg(target_os = "android")]
{
tao::android_binding!(
com_example,
wry_app,
WryActivity,
wry::android_setup, // pass the wry::android_setup function to tao which will invoke when the event loop is created
_start_app
);
wry::android_binding!(com_example, ttt);
}
WRY_ANDROID_PACKAGE
:这是您的android项目和app名称的反向域名,例如:com.wry.example.wry_app
WRY_ANDROID_LIBRARY
:例如,如果您的cargo项目有一个名为wry_app
的lib名称,它将生成libwry_app.so
,因此您将此环境变量设置为wry_app
WRY_ANDROID_KOTLIN_FILES_OUT_DIR
:例如,path/to/app/src/main/kotlin/com/wry/example
合作伙伴
有关赞助商的完整列表,请访问我们的网站和Open Collective。
许可证
Apache-2.0/MIT
依赖关系
~1–50MB
~727K SLoC