* refactor: remove unnecessary private mod shared (#400) * refactor: remove unnecessary private mod shared * chore: make fmt happy * refactor: use eventloop proxy in `custom_titlebar` example (#401) * Switch to tauri-webview2 (#411) * Switch to tauri-webview2 This is a temporary fix of null pointer crash on `get_content` of web resource request. We will switch it back once upstream is updated. * Add change file * fix: remove clipboard property for consistency across platforms (#412) * Remove clipboard property for consistancy across platforms * Remove clipboard property for consistency * feat: add inner_size for webview struct (#394) * Add inner_size method * Add inner_size for webview * Fix feature flag placement * Add feature flag on inner_size * Cargo fmt * feat(linux): allow resizing undecorated window using touch, closes #399 (#402) * feat(linux): allow resizing undecorated window using touch closes #399 * fix windows * update custom_titlebar example * revert windows changes * Implement WebContextImpl on mac (#372) * Implement WebContextImpl on mac * Update type visibility * Update cfg declaration * Move WebContextImpl to wkwebview * Fix protocol signature * Add missing feature flag * Cargo fmt * Add change file * Replace winapi with windows crate and use webview2-com instead of webview2 (#414) * Add Windows and webview2-com crates * Replace winapi and webview2-sys with webview2-com * Get all the examples working with webview2-com * Point to the published version of webview2-com * Add a summary in .changes * Remove extra projects not in config.json * Run cargo fmt --all * Fix clippy warnings * Update to 32-bit compatible webview2-com * Sync with refactor in next branch of tao * Use path prefix to prevent variable shadowing * Fix Linux nightly/stable clippy warnings * Update to latest review feedback in TAO * Replace tao dependency with git+branch * Switch to next branch of upstream tao repo * doc: add warning doc on webcontext and ptr detections (#419) * Add warning doc on webcontext and ptr detections * cargo fmt * Move Unix's webcontext implementation to webkitgtk (#421) * chore: add `on_issue_closed.yml` (#424) * Update webkit2gtk to 0.15 (#429) * Update webkit2gtk * Update webkit2gtk to 0.15 * Add changes file * fix: add feature flags to toggle private APIs (#431) * Add transparent feature flag * Add flag for video fullscreen on macOS * Add change file * Make clippy happy * Add clipboard field in WebViewAttributes (#432) * fix(webview/linux): Use a workaround to fix CORS ... (#435) ... when making XHR requests inside a custom URI scheme context. Reference:9b6eae32a6/Source/WebKit/UIProcess/API/glib/WebKitProtocolHandler.cpp (L82-L91)* Delete on_issue_closed.yml (#436) * Enable secure context back (#438) * Disable all option on custom url scheme for now * Enable secure context back * fix link to tao repo (#439) * fix(deps): update rust crate http to 0.2.5 (#416) Co-authored-by: Renovate Bot <bot@renovateapp.com> * fix link to tao Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Renovate Bot <bot@renovateapp.com> Co-authored-by: Ngo Iok Ui (Wu Yu Wei) <wusyong9104@gmail.com> * chore: remove unused files (#440) * Update webview2-com and windows crates (#446) * Replace webivew2-com-sys with prebuilt windows * Bump to latest versions * Set file drop handler after window creation * Point tao back to the upstream next branch * Rerun cargo fmt and fix Windows clippy warnings * Add changelog file * Use aliases for webview2_com instead of windows * Use time instead of chrono (#447) * Use time instead of chrono * Make clippy happy * fix(macos): unsupported key feedback sound (#448) * fix(macos): unsupported key feedback sound, closes # * Fix scope of YES Co-authored-by: Yu-Wei Wu <wusyong9104@gmail.com> * Revert "fix(macos): unsupported key feedback sound (#448)" This reverts commitb8fdfd6aa1. * Use tao commit with windows 0.25 * Switch back to tao's next branch * feat: enable cookie persistence on Linux (#453) * feat: enable cookie persistence on Linux * fmt * Bump webkit2gtk version (#457) * Update windows crate to 0.29.0 and webview2-com to 0.9.0 (#455) * Update to windows 0.29.0 * Add change description * Update tao dependency (#461) * fix: ignore transparency on Windows 7 (#460) * fix: ignore transparency on Windows 7 * Update Cargo.toml Co-authored-by: Ngo Iok Ui (Wu Yu Wei) <wusyong9104@gmail.com> * Remove clippy check (#462) * chore: update PR template * Fix: #276 - Add ability to set custom User Agent (#464) * feat: Custom user agent attribute Included example * Fix setting type on Windows Co-authored-by: Adit Sachde <23707194+aditsachde@users.noreply.github.com> Co-authored-by: Wu Yu Wei <wusyong9104@gmail.com> * Add support of `HTTPBodyStream` (#465) * Update to 2021 edition (#466) * Update windows crate to 0.30.0 * change tao dep * remove "tray" from default features and allow using "ayatana" instead (#469) The "tray" feature enables dependency on libappindicator3. On Debian 11 (and some other systems), libappindicator3 was removed and replaced with libayatana-appindicator3: https://www.debian.org/releases/bullseye/amd64/release-notes/ch-information.en.html#noteworthy-obsolete-packages This new library can be used by enabling the "ayatana" feature. Depending on the system, only one of those library will usually be available, and thus, only one of the "tray" and "ayatana" feature would compile fine. Having "tray" in default features did prevent building on systems with no libappindicator3 available. * Update tray examples (#470) * chore: update pull request commit exmple * feat: enable objc's exception feature [TRI-039] * refactor: IPC handler [TRI-019] * Feat/isolation (#5) Co-authored-by: Renovate Bot <bot@renovateapp.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Ngo Iok Ui (Wu Yu Wei) <wusyong9104@gmail.com> Co-authored-by: Yu-Wei Wu <wusyong9104@gmail.com> Co-authored-by: Adit Sachde <23707194+aditsachde@users.noreply.github.com> Co-authored-by: Wu Yu Wei <wusyong9104@gmail.com> Co-authored-by: Amr Bashir <48618675+amrbashir@users.noreply.github.com> Co-authored-by: Bogdan Bivolaru <104334+bogdanbiv@users.noreply.github.com> Co-authored-by: Bill Avery <wravery@users.noreply.github.com> Co-authored-by: Lucas Fernandes Nogueira <lucasfernandesnog@gmail.com> Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.studio> Co-authored-by: amrbashir <amr.bashir2015@gmail.com> Co-authored-by: Chip Reed <chip@chip.sh> Co-authored-by: Jhonatan A <1548170+baguio@users.noreply.github.com> * chore: fix Linux clippy warnings * chore(audit): add report * fix: windows build * Update gtk to 0.15 (#472) * chore: new `multi_window` example, closes #459 (#476) * chore: new `multi_window` example, closes #459 * revert license change Co-authored-by: Jason <jason@pews.dev> Co-authored-by: Amr Bashir <48618675+amrbashir@users.noreply.github.com> Co-authored-by: Bill Avery <wravery@users.noreply.github.com> Co-authored-by: liushuyu <liushuyu011@gmail.com> Co-authored-by: Bogdan Bivolaru <104334+bogdanbiv@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Renovate Bot <bot@renovateapp.com> Co-authored-by: Lucas Fernandes Nogueira <lucasfernandesnog@gmail.com> Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.studio> Co-authored-by: amrbashir <amr.bashir2015@gmail.com> Co-authored-by: Jhonatan A <1548170+baguio@users.noreply.github.com> Co-authored-by: Adit Sachde <23707194+aditsachde@users.noreply.github.com> Co-authored-by: Michael Alyn Miller <malyn@strangeGizmo.com> Co-authored-by: Bill Avery <wravery@gmail.com> Co-authored-by: Aurélien Jacobs <aurel@gnuage.org> Co-authored-by: Chip Reed <chip@chip.sh>
3.2 KiB
Cross-platform WebView rendering library in Rust that supports all major desktop platforms like Windows, macOS, and Linux.
Overview
Wry connects the web engine on each platform and provides easy to use and unified interface to render WebView. It also re-exports tao as a module for event loop and window creation.
Usage
The minimum example to create a Window and browse a website looks like following:
fn main() -> wry::Result<()> {
use wry::{
application::{
event::{Event, StartCause, WindowEvent},
event_loop::{ControlFlow, EventLoop},
window::WindowBuilder,
},
webview::WebViewBuilder,
};
let event_loop = EventLoop::new();
let window = WindowBuilder::new()
.with_title("Hello World")
.build(&event_loop)?;
let _webview = WebViewBuilder::new(window)?
.with_url("https://tauri.studio")?
.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,
_ => (),
}
});
}
There are also more samples under examples, you can enter commands like following to try them:
cargo run --example multi_window
For more information, please read the documentation below.
Documentation
Platform-specific notes
All platforms uses tao to build the window, and wry re-export it as application module. Here are the underlying web engine each platform uses, and some dependencies you might need to install.
Linux
Tao uses gtk-rs and its related libraries for window creation and wry also needs WebKitGTK for WebView. So please make sure following packages are installed:
Arch Linux / Manjaro:
sudo pacman -S webkit2gtk libappindicator-gtk3
Debian / Ubuntu:
sudo apt install libwebkit2gtk-4.0-dev libappindicator3-dev
Fedora
sudo dnf install gtk3-devel webkit2gtk3-devel libappindicator-gtk3-devel
macOS
WebKit is native on macOS so everything should be fine.
If you are cross-compiling for macOS using osxcross and encounter a runtime panic like Class with name WKWebViewConfiguration could not be found it's possible that WebKit.framework has not been linked correctly, to fix this set the RUSTFLAGS environment variable:
RUSTFLAGS="-l framework=WebKit" cargo build --target=x86_64-apple-darwin --release
Windows
WebView2 provided by Microsoft Edge Chromium is used. So wry supports Windows 7, 8, and 10.
License
Apache-2.0/MIT