1 个不稳定版本
0.1.0 | 2020 年 5 月 3 日 |
---|
#5 在 #web-view
14KB
218 行
yew_webview_bridge - yew 和 web-view 之间的双向通信
此软件包提供了一个在 web-view 和 yew 之间的双向通信桥。
对于前端,它提供了一个 yew 服务 (WebViewMessageService
),组件可以通过它轻松地向 web-view 发送(并接收匹配的响应)。
对于后端,它提供了一个易于使用的处理程序,可用于响应对前端的消息。
内部,为每个服务和消息生成唯一的随机 ID,以便将响应与正确的组件和消息匹配起来。
安装
必须将此软件包包含在具有 yew 的前端软件包(具有 web-view 的后端/宿主软件包)中,并使用适当的特性标志。
前端软件包
[dependencies]
yew_webview_bridge = { version = "0.1.0", features = ["frontend"] }
后端软件包
[dependencies]
yew_webview_bridge = { version = "0.1.0", features = ["backend"] }
用法
前端(yew)
use yew_webview_bridge::frontend::*;
pub struct MyComponent {
webview: WebViewMessageService,
// .. other fields
}
// In one of the components methods (e.g. update)
send_future(
&self.link,
self.webview
.send_message(self.state.value.clone()) // The value you want to send
.map(|res: String| Msg::AddStr(res)), // Mapping the result to a component Msg
);
后端(web-view)
use yew_webview_bridge::backend::*;
web_view::builder()
// all the other options
.invoke_handler(|webview, arg| {
handle_yew_message(webview, arg, |message: String| {
// If we return a Some(_), we send a response for this message
Some(format!("Hello, {}", &message))
});
Ok(())
})
.run()
.unwrap();
致谢
大量灵感来源于关于问题的讨论 讨论,以及 由 @mbuscemi 创建的结果示例仓库。向所有参与人员表示感谢!
许可证
根据您的选择,在 Apache License,版本 2.0 或 MIT 许可证 下许可。除非您明确声明,否则您提交给此软件包的任何有意贡献,根据 Apache-2.0 许可证定义,应按上述方式双重许可,不附加任何其他条款或条件。
依赖项
~1.2–4.5MB
~81K SLoC