#yew #web-view #back-end

yew_webview_bridge

web-view 和 yew 之间的双向通信桥

1 个不稳定版本

0.1.0 2020 年 5 月 3 日

#5#web-view

MIT/Apache

14KB
218

yew_webview_bridge - yew 和 web-view 之间的双向通信

此软件包提供了一个在 web-viewyew 之间的双向通信桥。

对于前端,它提供了一个 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.0MIT 许可证 下许可。
除非您明确声明,否则您提交给此软件包的任何有意贡献,根据 Apache-2.0 许可证定义,应按上述方式双重许可,不附加任何其他条款或条件。

依赖项

~1.2–4.5MB
~81K SLoC