在UniApp中使用WebView,实现双向通信

为什么用WebView?

WebView是[UniApp]中用于嵌入网页内容的组件,允许在应用中加载和显示网页。它适用于需要在应用中集成外部网页或HTML内容的场景,如展示帮助文档、加载第三方服务等。简单来说就是:我需要在app环境做一些uniapp的api不支持的功能,如:文件上传、音源转码等;

一、在[vue]文件中创建webview

插入的时候注意下,如果小伙伴用了自己src的地址发现页面出不来,可以也换成百度的试一下,如果百度的出的来,那就是你地址有问题;

官方文档

ini 复制代码
<template>
  <web-view
    ref="webview"
    id="myWebview"
    src="http://baidu.com"
    :fullscreen="false"
    @message="handleMessage"
    :webview-styles="{
      process: false,
    }" />
  <up-button @click="myClickFn">点击</up-button>
</template>
AI写代码html

二、[双向通信]:

2.1、uniapp→webview

  • vue中发送数据到html文件
javascript 复制代码
    // vue中发送数据到html文件,getMsgFromApp名字自定义
    myClickFn() {
      //  #ifdef APP-PLUS
      //选择到自己的webview-------h5不支持
      var currentWebview = this.$parent.$scope.$getAppWebview().children()[0]
      currentWebview.evalJS(`getMsgFromApp(${你的数据})`) 
      // #Endif
    },
AI写代码html
  • html中接收来自 uniapp 的消息
javascript 复制代码
    // html中接收来自 uniapp 的消息
    window.getMsgFromApp = function (arg) {
      console.log('接收来自 uniapp 的消息,arg',arg)
    }
AI写代码html

2.2、webview→uniapp

  • html向uniapp 发送消息
php 复制代码
    // 向 uniapp 发送消息
    function sendMessageToUniapp() {
      window.uni.postMessage({
        data: {
          type: 'fromWebview',
          message: '这是来自 webview 的消息',
        },
      })
    }
AI写代码html
  • uniapp接收html消息
typescript 复制代码
  <web-view
   、、、、
    @message="handleMessage"
    />    
 
    // 接收来自 webview 的消息
    handleMessage(event) {
      console.log('收到来自 webview 的消息:', event.detail)
    },
AI写代码html

三、完整代码

3.1UniApp:

xml 复制代码
<template>
  <web-view
    ref="webview"
    id="myWebview"
    src="http://baidu.com"
    :fullscreen="false"
    @message="handleMessage"
    :webview-styles="{
      process: false,
    }" />
  <up-button @click="myClickFn">点击</up-button>
</template>
<script>
export default {
  data() {
    return {}
  },
  methods: {
    // 接收来自 webview 的消息
    handleMessage(event) {
      console.log('收到来自 webview 的消息:', event.detail)
    },
    // 发送数据到html文件
    myClickFn() {
      //  #ifdef APP-PLUS
      //选择到自己的webview-------h5不支持
      var currentWebview = this.$parent.$scope.$getAppWebview().children()[0]
      currentWebview.evalJS(`getMsgFromApp(${你的数据})`) // #Endif
    },
  },
}
</script>
AI写代码html

3.2WebView的html:

xml 复制代码
<!DOCTYPE html>
<html>
 
<head>
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width,initial-scale=1" />
  <title>我的webview</title>
</head>
 
<body>
  <script src="xxxxxxxxxx" charset="UTF-8"></script> //引入的js文件
  <script type="text/javascript" src="https://gitcode.net/dcloud/uni-app/-/raw/dev/dist/uni.webview.1.5.6.js"></script>
  <div id="content" class="content">
    内容!!!!!!
  </div>
 
  <script type="text/javascript">
    // 接收来自 uniapp 的消息
    window.getMsgFromApp = function (arg) {
      console.log('接收来自 uniapp 的消息')
    }
 
    // 向 uniapp 发送消息
    function sendMessageToUniapp() {
      window.uni.postMessage({
        data: {
          type: 'fromWebview',
          message: '这是来自 webview 的消息',
        },
      })
    }
 
    window.onload = function () {
      // 页面创建时执行
      console.log('页面创建了')
    }
 
    window.addEventListener('pagehide', function (event) {
      if (event.persisted) {
        // 页面被浏览器缓存(如iOS Safari的后台标签)
        console.log('页面被缓存');
      } else {
        // 页面正在被销毁
        console.log('页面被销毁')
      }
    });
  </script>
 
</body>
<style>
 
</style>
 
</html>
AI写代码html
相关推荐
许彰午7 分钟前
# 政务表单动态建表?运行时DDL引擎,前端拖完字段后端直接建
java·前端·后端·架构·政务
宸津-代码粉碎机10 分钟前
Spring Boot 4.0 进阶实战+源码解析系列(持续更新)—— 从落地到源码,搞定面试与工作
java·人工智能·spring boot·后端·python·面试
XMYX-018 分钟前
07 - Go 函数(上):定义、参数、返回值与实战技巧
开发语言·后端·golang
一灯架构9 小时前
90%的人答错!一文带你彻底搞懂ArrayList
java·后端
mldong10 小时前
Python开发者狂喜!200+课时FastAPI全栈实战合集,10大模块持续更新中🔥
后端
GreenTea11 小时前
从 Claw-Code 看 AI 驱动的大型项目开发:2 人 + 10 个自治 Agent 如何产出 48K 行 Rust 代码
前端·人工智能·后端
Moment13 小时前
AI 全栈指南:NestJs 中的 Service Provider 和 Module
前端·后端·面试
IT_陈寒13 小时前
为什么我的JavaScript异步回调总是乱序执行?
前端·人工智能·后端
Moment13 小时前
AI全栈入门指南:NestJs 中的 DTO 和数据校验
前端·后端·面试
小村儿14 小时前
Harness Engineering:为什么你用 AI 越用越累?
前端·后端·ai编程