前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >React Native和web交互

React Native和web交互

作者头像
chuchur
发布于 2022-10-25 06:35:13
发布于 2022-10-25 06:35:13
1.3K00
代码可运行
举报
文章被收录于专栏:禅境花园禅境花园
运行总次数:0
代码可运行
React Native 和 H5 交互
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//接收来自H5的消息
onMessage = (e) => {
  Log("WebView onMessage 收到H5参数:", e.nativeEvent.data);
  let params = e.nativeEvent.data;
  params = JSON.parse(params);
  Log("WebView onMessage 收到H5参数 json后:", params);
};

onLoadEnd = (e) => {
  Log("WebView onLoadEnd e:", e.nativeEvent);
  let data = {
    source: "from rn",
  };
  this.web && this.web.postMessage(JSON.stringify(data)); //发送消息到H5
};
<WebView
  ref={(webview) => {
    this.web = webview;
  }}
  style={{
    width: "100%",
    height: "100%",
    justifyContent: "center",
    alignItems: "center",
  }}
  source={require("../data/testwebview.html")}
  onLoadEnd={this.onLoadEnd} //加载成功或者失败都会回调
  onMessage={(e) => this.onMessage(e)}
  javaScriptEnabled={true} //指定WebView中是否启用JavaScript
  startInLoadingState={true} //强制WebView在第一次加载时先显示loading视图
  renderError={(e) => {
    return <View />;
  }}
/>;
H5 和 React Native 交互
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>text webview</title>
    <script type="application/javascript">
      //相互通信只能传递字符串类型
      function test() {
        //发送消息到rn
        let params = {
          msg: "h5 to rn",
          source: "H5",
        };
        window.postMessage(JSON.stringify(params)); //发送消息到rn
      }

      window.document.addEventListener("message", function (e) {
        //注册事件 接收数据
        const message = e.data; //字符串类型
        console.log("WebView message:", message);
        window.postMessage(message);
      });
    </script>
  </head>
  <body>
    <h1>chuchur</h1>
    <button onclick="test()">单击</button>
  </body>
</html>

注意事项

假如你的WebView 是从 react-native 里引用的话.H5 向 RN 发消息则使用window.postMessage(message) 为了减少React Native的表面积,<WebView/>将从React Native核心中删除,推荐使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { WebView } from "react-native"; //会被移除
//to
import { WebView } from "react-native-webview";

假如是用react-native-webview引入则通讯方式使用window.ReactNativeWebView.postMessage(message) 有关更多信息,请阅读Slimmening 提案

原生调用 H5 方法
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[wkWebView evaluateJavaScript:@"js方法名()" completionHandler:^(id _Nullable response, NSError * _Nullable error) {
    if (!error) { // 成功
       NSLog(@"%@",response);
    } else { // 失败
        NSLog(@"%@",error.localizedDescription);
    }
}];
H5 调用原生方法
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 //App端:
  // 1. WKWebView注入ScriptMessageHandler
 [wkWebView.configuration.userContentController addScriptMessageHandler:(id <WKScriptMessageHandler>)scriptMessageHandler name:@"xxx"];
  // 2. 提供setWebViewAppearance方法,这样就能反射出H5即将传来的字符串@"setWebViewAppearance"
  - (void)setWebViewAppearance {

  }

//H5端:
  // 1. 获取handler
  var handler = {
    callHander: function (json) {
    if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {//ios
        window.webkit.messageHandlers.xxx.postMessage(JSON.stringify(json))
    }
    if (/(Android)/i.test(navigator.userAgent)) { //Android
        window.xxx.postMessage(JSON.stringify(json));
    }
  }
  // 2. 设置调用App方法所需要的传出的参数(这里是json格式)
  function setAppAppearance(){
    handler.callHander({
        'body':"setWebViewAppearance",
        'buttons': [
            {
                "text":"分享",
                "action":""
            }
        ],
        'title':"这是webView的标题"
    });
  }
  // 3. H5调用自己的设置方法,继而调用了原生客户端的方法
  setAppAppearance();

提示报错:

WKJavaScriptExceptionMessage=ReferenceError: Can't find variable xxx 需要方法需要挂在 window 上 window.xxx = function() {} for vue, mounted: window.xxx =this.xxx

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/04/05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Python-OpenCV(2)
本文介绍了如何通过OpenCV库和Python编程语言实现图形化调色板,包括创建滑动条、选择颜色和显示图像。通过这些工具,用户可以方便地在图像上添加和修改颜色,进行可视化操作。
GavinZhou
2018/01/02
9770
Python-OpenCV(2)
Python中使用opencv-python库进行颜色检测
之前写过一篇VC++中使用OpenCV进行颜色检测的博文,当然使用opencv-python库也可以实现。 在Python中使用opencv-python库进行颜色检测非常简单,首选读取一张彩色图像,并调用函数imgHSV = cv2.cvtColor(img,cv2.COLOR_BGR2HSV);函数将原图img转换成HSV图像imgHSV,再设置好HSV三个分量的上限和下限值,调用inRange函数imask = cv2.inRange(imgHSV,lower,upper)将HSV色彩图像转换成掩码图,掩码图中只有黑白二值图像,从而达到颜色检测的目的。颜色检测通常可以用于物体检测和跟踪中,尤其在不同的图像和物体中根据特定的颜色去筛选出某个物体。
ccf19881030
2024/05/24
6070
Python中使用opencv-python库进行颜色检测
OpenCV--利用轨迹条进行图片调色
云帆沧海
2024/01/17
1800
OpenCV--利用轨迹条进行图片调色
计算机视觉:1.1~2.5 初等概念及OpenCV的使用
现在说的机器视觉(Machine Vision)一般指计算机视觉(Computer Vision),简单来说就是研究如何使机器看懂东西。就是指用摄影机和电脑代替人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图形处理,使电脑处理成为更合适人眼观察或传送给仪器检测的图像。
DioxideCN
2022/08/05
1.4K0
计算机视觉:1.1~2.5 初等概念及OpenCV的使用
图像动态融合
算法:图像动态融合是以第一张图为主图,保留主图部分颜色信息和边缘信息,以第二张图为融入源,保留融入源部分颜色信息,动态调整融入比例。
裴来凡
2022/05/29
4330
图像动态融合
OpenCV 图像与视频的基础操作
在计算机视觉领域,OpenCV是一款广泛使用的开源库,用于图像处理和计算机视觉任务。当你开始使用OpenCV时,了解如何创建和显示窗口,以及加载和保存图片是至关重要的基础知识。本文将介绍如何使用OpenCV进行这些操作,帮助你更好地掌握图像处理和视觉任务的开发技巧。
繁依Fanyi
2023/10/12
4990
OpenCV 图像与视频的基础操作
OpenCV计算机视觉整理图像、视频加载与显示OpenCV的色彩空间OpenCV图形绘制
每一个像素有三种颜色——红色、绿色和蓝色。通过不同光源的组合,形成真彩色,有暗的,有明亮的。
算法之名
2021/11/15
9870
OpenCV计算机视觉整理图像、视频加载与显示OpenCV的色彩空间OpenCV图形绘制
OpenCV学习笔记(Python)
警告: 就算图像的路径是错的, OpenCV 也不会提醒你的,但是当你使用命 令print img时得到的结果是None。
一点儿也不潇洒
2018/08/07
3.8K0
OpenCV学习笔记(Python)
番外篇: 滑动条
首先我们需要创建一个滑动条,如cv2.createTrackbar('R','image',0,255,call_back),其中
CodecWang
2021/12/07
8240
番外篇: 滑动条
基于python和OpenCV构建智能停车系统
根据复杂性和效率的不同,任何问题都具有一个或多个解决方案。目前智能停车系统的解决方案,主要包括基于深度学习实现,以及基于重量传感器、光传感器实现等。
小白学视觉
2020/08/13
1.9K0
StereoSGBM图像分割
(450, 800, 3) (450, 800, 3) computing disparity...
裴来凡
2022/05/28
5830
StereoSGBM图像分割
opencv色彩空间的转化
淼学派对
2023/10/14
2150
opencv色彩空间的转化
opencv锁定鼠标定位
淼学派对
2023/10/14
2290
opencv锁定鼠标定位
实战 | 基于OpenCV实现魔方颜色识别与色块排序
为了做自动魔方识别与复原项目,需要用图像处理的方法识别魔方每个色块的位置与颜色。相机拍摄的魔方单面图像如下:
Color Space
2024/06/17
7790
实战 | 基于OpenCV实现魔方颜色识别与色块排序
Python 图片亮度检测和调节
项目上遇到一个问题,图片上的物体识别度较差,尤其是在晚上的图片,画面模糊不清晰,则需要对太暗的图片需要单独提高画面亮度。解法分2步:先检测画面亮度,然后调节画面亮度与对比度。
用户9925864
2022/07/27
2.8K0
Python 图片亮度检测和调节
Python-OpenCV,基于标准文档的实例(二)
现在我们来创建一个简单的程序:通过调节滑动条来设定画板颜色。我们 要创建一个窗口来显示显色,还有三个滑动条来设置B,G,R 的颜色。当我们 滑动滚动条是窗口的颜色也会发生相应改变。默认情况下窗口的起始颜色为黑。 cv2.getTrackbarPos() 函数的一个参数是滑动条的名字,第二个参数 是滑动条被放置窗口的名字,第三个参数是滑动条的默认位置。第四个参数是 滑动条的最大值,第五个函数是回调函数,每次滑动条的滑动都会调用回调函 数。回调函数通常都会含有一个默认参数,就是滑动条的位置。在本例中这个 函数不用做任何事情,我们只需要pass 就可以了。 滑动条的另外一个重要应用就是用作转换按钮。默认情况下OpenCV 本 身不带有按钮函数。所以我们使用滑动条来代替。在我们的程序中,我们要创 建一个转换按钮,只有当装换按钮指向ON 时,滑动条的滑动才有用,否则窗 户口都是黑的。
王也518
2022/10/26
5270
Python-OpenCV,基于标准文档的实例(二)
作业总结:磨皮滤镜(双边滤波bilateralFilter)代码实现[通俗易懂]
双边滤波是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折衷处理,同时考虑空间与信息和灰度相似性,达到保边去噪的目的,具有简单、非迭代、局部处理的特点。之所以能够达到保边去噪的滤波效果是因为滤波器由两个函数构成:一个函数是由几何空间距离决定滤波器系数,另一个是由像素差值决定滤波器系数.
全栈程序员站长
2022/09/16
6810
工厂人员作业行为动作识别检测算法
工厂人员作业行为动作识别检测算法通过SVM+R-CNN深度学习算法框架模型,工厂人员作业行为动作识别检测算法实时识别并分析现场人员操作动作行为是否符合SOP安全规范流程作业标准,如果不符合则立即抓拍告警提醒。人员作业行为动作识别检测算法首先基于R-CNN进行人体检测,之后并对其进行追踪,并以相同的帧率生成MHI。之后,将所有边界框映射到由相同RGB图像序列生成的相应MHI,并在边界框中提取每个子MHI的HOG特征,最后使用SVM进行分类。
燧机科技
2023/09/22
1.1K0
工厂人员作业行为动作识别检测算法
OpenCV-Python学习(7)—— OpenCV 轨迹栏操作和键盘响应操作
1. 知识点 cv.namedWindow() 创建一个窗口; cv.createTrackbar() 创建一个轨迹栏; cv.getTrackbarPos() 获取对应轨迹栏的轨迹位置; cv.waitKey() 键盘操作返回对应的key。 2. cv.namedWindow() 函数说明 函数使用 cv.namedWindow(winname, flags=None) 参数说明 参数 说明 winname 表示创建窗口的名称。 flags 表示创建的窗口类型。 flags 说明 值 说明 WINDO
Rattenking
2022/10/24
1K0
OpenCV-Python学习(7)—— OpenCV 轨迹栏操作和键盘响应操作
【python-opencv】轨迹栏作为调色板
在这里,我们将创建一个简单的应用程序,以显示您指定的颜色。您有一个显示颜色的窗口,以及三个用于指定B、G、R颜色的跟踪栏。滑动轨迹栏,并相应地更改窗口颜色。默认情况下,初始颜色将设置为黑色。
西西嘛呦
2020/08/26
7470
【python-opencv】轨迹栏作为调色板
相关推荐
Python-OpenCV(2)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档