Vue.js uni-app 混合模式原生App webview与H5的交互

这篇具有很好参考价值的文章主要介绍了Vue.js uni-app 混合模式原生App webview与H5的交互。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在现代移动应用开发中,原生App与H5页面之间的交互已经成为一个常见的需求。本文将介绍如何在Vue.js框架中实现原生App与H5页面之间的数据传递和方法调用。我们将通过一个简单的示例来展示如何实现这一功能。

效果图如下:
Vue.js uni-app 混合模式原生App webview与H5的交互,vue.js,uni-app,交互,javascript,html5,前端

首先,我们需要在Vue.js项目中引入原生App与H5页面之间的通信桥梁。在这个示例中,我们将使用一个名为bridge.js的文件来实现这个功能。bridge.js文件内容如下:

// #ifdef H5
import Vue from 'vue';
import { registerHandler } from '@/utils/bridge.js';
Vue.prototype.$bridge = {
  registerHandler(name, handler) {
    registerHandler(name, handler);
  },
};
// #endif

接下来,我们在Vue.js组件中定义两个方法:appToH5()h5ToApp()。这两个方法分别用于实现原生App向H5页面传递数据和H5页面向原生App发送数据的功能。

<template>
  <view class="content">
    <view class="text-area" @click="appToH5()">原生app调用H5方法(原生给H5传值)</view>
    <view class="text-area" @click="h5ToApp()">H5调用原生App方法 (H5给原生传值)</view>
  </view>
</template>

在Vue.js组件的methods对象中,我们定义了这两个方法的具体实现:

export default {
  data() {
    return {
      title: 'Hello',
      myObjData: {},
    };
  },
  mounted() {
    this.appToH5();
  },
  methods: {
    appToH5() {
      const handlerName = 'dataToJs'; // 在bridge.js中注册的处理函数名
      const data = JSON.stringify(this.myObjData); // 需要传递的数据,这里以JSON字符串形式表示
      const responseCallback = (responseData) => console.log('H5收到原生数据:', responseData); // H5接收到数据的回调函数

      // 在bridge.js中注册处理函数,并将数据传递给H5页面
      this.$bridge.registerHandler(handlerName, (data, responseCallback) => {
        if (typeof data === 'string') {
          const parsedData = JSON.parse(data);
        } else {
          const parsedData = data;
        }
        responseCallback(parsedData); // 将解析后的数据传递给H5页面的回调函数
      });
    },
    h5ToApp() {
      const handlerName = 'goLogin'; // 在bridge.js中注册的处理函数名
      const userInfo = 'testUserInfo'; // 需要传递给原生App的用户信息,这里以字符串形式表示
      const responseCallback = (res) => console.log('原生App收到H5数据:', res); // H5接收到数据的回调函数

      // 在bridge.js中调用原生App的方法,并将用户信息传递给原生App
      this.$bridge.callHandler(handlerName, userInfo, responseCallback);
    },
  },
};

在这个示例中,我们首先在Vue.js组件的methods对象中定义了appToH5()h5ToApp()两个方法。在appToH5()方法中,我们首先获取需要传递给H5页面的数据,然后在bridge.js文件中注册一个处理函数,该函数负责将数据从JavaScript对象转换为JSON字符串,并将其传递给H5页面。同时,我们还定义了一个回调函数,用于接收H5页面返回的数据。最后,我们调用this.$bridge.registerHandler()方法注册处理函数。

原生App实现方式,使用WebViewJavascriptBridge框架

一、引入WebViewJavascriptBridge框架

首先,我们需要在项目中引入WebViewJavascriptBridge框架。这个框架提供了一个桥接iOS和JavaScript的方法,使得我们可以在iOS中调用JavaScript函数,也可以在JavaScript中调用iOS方法。

// 引入WebViewJavascriptBridge框架
#import <WebViewJavascriptBridge/WebViewJavascriptBridge.h>

二、创建桥接对象

在iOS代码中,我们需要创建一个WKWebViewJavascriptBridge对象,这个对象负责管理JavaScript与iOS之间的通信。

// js与oc交互
_bridge = [WKWebViewJavascriptBridge bridgeForWebView:self.currentWebView];
// 设置wkwebview代理对象
[_bridge setWebViewDelegate:self];

三、注册原生方法给JS调用

接下来,我们需要在iOS代码中注册一些原生方法,以便JavaScript可以调用这些方法。这些方法通常用于处理一些特殊的业务逻辑,例如分享功能和返回操作。

// 注册原生方法给JS调用
- (void)registObjcFunction {
    // 注册分享方法
    [self.bridge registerHandler:@"shareClick" handler:^(id data, WVJBResponseCallback responseCallback) {
        [ZJShareManage shareImgWithVC:self title:data[@"title"] describeTitle:data[@"describeTitle"] andUrl:data[@"url"]];
    }];
    
    // 注册返回方法
    [self.bridge registerHandler:@"goNavBack" handler:^(id data, WVJBResponseCallback responseCallback) {
        [self.navigationController popViewControllerAnimated:YES];
    }];
}

四、调用JavaScript方法

现在,我们已经注册了一些原生方法,接下来就可以在iOS代码中调用JavaScript方法了。我们只需要使用_bridge对象的callHandler:data:responseCallback:方法即可。

if (self.jsData && self.methodString) {
    [_bridge callHandler:_methodString data:_jsData responseCallback:^(id responseData) {
        DBLog(@"responseData = %@",responseData);
    }];
}

五、总结

通过本文的介绍,我们了解了如何使用WebViewJavascriptBridge框架在iOS中与JavaScript进行交互。这种交互方式不仅简单易用,而且能够提高开发效率。希望本文对你有所帮助,如果你有任何疑问或者建议,欢迎留言讨论。

阅读全文下载完整组件代码请关注微信公众号: 前端组件开发
Vue.js uni-app 混合模式原生App webview与H5的交互,vue.js,uni-app,交互,javascript,html5,前端文章来源地址https://www.toymoban.com/news/detail-600470.html

到了这里,关于Vue.js uni-app 混合模式原生App webview与H5的交互的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uni-app中监听网络状态,并在嵌入webView页面的组件中添加网络监测

    下载插件 打开网络异常组件页面,点击\\\"下载插件并导入HBuilderX\\\"按钮,打开HBuilderX软件后,选择需要导入插件的项目,点击“确定即可”。 使用插件 pages/network/index页面,仿照微信。 效果展示 修改网络监测组件mz-network-error 当网络状态发生变化时emit相关事件 修改组件调用

    2024年02月12日
    浏览(50)
  • uni-app之android原生插件开发

    一 插件简介 1.1 当HBuilderX中提供的能力无法满足App功能需求,需要通过使用Andorid/iOS原生开发实现时,可使用App离线SDK开发原生插件来扩展原生能力。 1.2 插件类型有两种,Module模式和Component模式 Module模式:能力扩展,无嵌入窗体的UI控件。大部分插件都是属于此类,比如调

    2024年02月07日
    浏览(50)
  • uni-app嵌入微信小程序原生代码

    使用uni-app有时需要用到微信小程序原生代码 解析: uni-app项目结构跟原生小程序的项目结构有着不一致的区别,如果说开发过程中必须要使用原生代码,就需要把原生代码作为组件的方式在uni-app项目中引入使用 官网为了应对这一个需求,就给出了以下方法,供开发者实现 wxcompone

    2024年02月05日
    浏览(70)
  • 微信小程序修改原生组件样式(uni-app)

    微信小程序修改原生组件样式 全局修改,直接将修改的样式写在全局的样式文件中; 特殊情况:修改swiper指示点样式时,需要包裹在swiper的样式选择器下才生效。 直接将下列代码放在全局样式中是不会生效的,需要加上swiper组件的元素选择器或swiper组件的其他样式名也可。

    2024年02月05日
    浏览(76)
  • 解决uni-app小程序原生tabbar 添加阴影问题

    下面是实现的效果  步骤1 创建一个组件  文件名和组件名要一致  步骤2  在组件中实现阴影效果 步骤3 在tabbar 页面使用  直接使用 即可 不用引入  

    2024年02月07日
    浏览(64)
  • 语法速通 uni-app随笔【uni-app】【微信小程序】【vue】

    其中, pages 目录/ index 目录【必有】: index.js 编写业务逻辑 【初始数据,生命周期函数】 index.json 编写配置 index.wxml 编写模板 【可理解为本页html】 index.wxss 【可理解为本页css】 直接输入敲回车,连尖括号都不需要就可以标签补全 1)初始数据写死 在 index.wxml 引入变

    2024年02月12日
    浏览(173)
  • 微信小程序原生框架转Uni-App:你需要知道的一切

    博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客👦🏻 《java 面试题大全》 🍩惟余辈才疏学浅,临摹之作或有不妥之处,还请读者海涵指正。☕🍭 《MYSQL从入门到精通》数据库是开发者必会基础之一~ 🪁 吾期望此文有资助于尔,即使粗浅难及深广,亦备添少许微薄

    2024年02月09日
    浏览(60)
  • uni-app - App 平台内嵌网页物理手机自带返回键失效解决方案(内嵌的 webview 网页 H5 打包后手机物理返回键无效直接退出应用了)

    当您需要打包 App(*.apk) 平台时,发现内嵌的 H5 页面虽然可以正常显示与运行,但是手机的物理返回键却无法使用,当点击手机物理返回按键(或手势)时,直接显示 “再按一次退出应用”,而 并非返回上一个\\\"网页\\\"。 出现这种情况的原因是, 内嵌的网页与您的 App “毫无

    2024年02月09日
    浏览(86)
  • uni-app:vue3 + uni-app 在微信小程序中无法使用app.component全局注册组件

    按上文中的代码执行后,会发现在微信小程序开发中全局注册的组件是无法显示的,这是uniapp的一个未解决bug, 在uniapp中出了可以通过vue实例的component方法注册全局组件外,uniapp支持另一种全局注册的方式,就是通过 easycom 扫描注册,步骤如下 easycom 的扫描流程是:通过代码

    2024年02月16日
    浏览(98)
  • uni-app:js修改元素样式(宽度、外边距)

    效果 代码 1、在 view 元素上添加一个 ref 属性 ,用于在JavaScript代码中获取对该元素的引用:view ref=\\\" myView \\\" id=\\\"mybox\\\"/view 2、获取元素引用 :const viewElement = this.$refs. myView .$el; 3、修改元素宽度:viewElement.style.width = \\\'100px\\\'; 4、修改元素左外边距:viewElement.style.marginLeft = \\\'20px\\\'; 这种

    2024年02月07日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包