WebView Bridge

1.场景

在进行web加壳后,想要内嵌的web页通过点击web页中的扫码按钮从而调取手机相机硬件

2.解决方案

  • 我所能做到的是React Native壳子中可以正常唤起相机硬件,但是对于一个 webview 组件来说,组件中貌似只能存在一个 webview 组件,那该如何进行操作硬件呢?

  • 然后通过询问架构师

    • “webview 调取手机硬件前端做不到的,XXX是自己写了 SDK,这个就是一种 webview 的 bridge 的技术”

    概述 | 微信开放文档

  • 可能是RN也是有相关的API,我以为他是像第三方库一样的存在,结果我就在RN的webview组件的配置项中找到了他。

    WebView · React Native 中文网

3.这里是一个简单的demo

简单的来说就是:

  • RN向web进行传值则是通过 JavaScript
  • web向RN进行传值则是通过 onMessage
import React, { useState } from "react";
import WebView from "react-native-webview";
function DataScreen({ navigation, route }) {
  const html = `
  <!DOCTYPE html>
  <html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>JS Bin</title>
  </head>
  <body>
    <input class="cwsuid-input-field" />
    <button id="btn">打开cam</button>
  </body>
  </html>
  `;

  const scriptbase = `document.getElementById('btn').onclick = () => {
    let camflag = false;
    window.ReactNativeWebView.postMessage(camflag);
  }`;

  return (
    <WebView
      style={{ height: 300, width: "100%" }}
      source={{ html: html }}
      onMessage={(event) => {
        console.log(event.nativeEvent.data);
        if (event.nativeEvent.data === "false") {
          console.log("打开相机");
          navigation.navigate("Details");
        }
      }}
      injectedJavaScript={scriptbase}
    />
  );
}

export default DataScreen;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值