uni-app实现web-view和App之间的互相通信

1.web-view向App传递消息

官网对于uni-app使用web-view的介绍如下:web-view

 注意事项提到postMessage方法,这就是web-view向App传递消息的方法,使用如下:

 

注意H5本身不支持uni-app里面的方法,所以在项目中引入支持调用uni-app方法的库

 web-view页面使用:

uni.postMessage({data: {action: 'click'}
});

uni-app接受消息:

view><!--  #ifdef APP-PLUS --><uni-status-bar></uni-status-bar><!--  #endif --><web-view @message="getMessage" :src="webViewUrl"></web-view>
</view>getMessage(e) {console.log('webView传递过来的消息')const action = e.detail.data[0].action}

这种方法只能适用于H5不是UNI写的,如果是UNI写的会报错  

uni.postMessage 不是一个方法,原因在于 webview 的uni方法和dUni-app 的uni方法冲突了,解决办法,把js下载下来里面的方法明换掉;
例如:
! function (e, n) {"object" == typeof exports && "undefined" != typeof module ? module.exports = n() : "function" == typeof define && define.amd ? define(n) : (e = e || self).webUni = n()
}(this, (function () {"use strict";try {var e = {};Object.defineProperty(e, "passive", {get: function () {!0}}), window.addEventListener("test-passive", null, e)} catch (e) {}var n = Object.prototype.hasOwnProperty;function t(e, t) {return n.call(e, t)}var i = [],a = function (e, n) {var t = {options: {timestamp: +new Date},name: e,arg: n};if (window.__dcloud_weex_postMessage || window.__dcloud_weex_) {if ("postMessage" === e) {var a = {data: [n]};return window.__dcloud_weex_postMessage ? window.__dcloud_weex_postMessage(a) : window.__dcloud_weex_.postMessage(JSON.stringify(a))}var o = {type: "WEB_INVOKE_APPSERVICE",args: {data: t,webviewIds: i}};window.__dcloud_weex_postMessage ? window.__dcloud_weex_postMessageToService(o) : window.__dcloud_weex_.postMessageToService(JSON.stringify(o))}if (!window.plus) return window.parent.postMessage({type: "WEB_INVOKE_APPSERVICE",data: t,pageId: ""}, "*");if (0 === i.length) {var r = plus.webview.currentWebview();if (!r) throw new Error("plus.webview.currentWebview() is undefined");var d = r.parent(),s = "";s = d ? d.id : r.id, i.push(s)}if (plus.webview.getWebviewById("__uniapp__service")) plus.webview.postMessageToUniNView({type: "WEB_INVOKE_APPSERVICE",args: {data: t,webviewIds: i}}, "__uniapp__service");else {var w = JSON.stringify(t);plus.webview.getLaunchWebview().evalJS('UniPlusBridge.subscribeHandler("'.concat("WEB_INVOKE_APPSERVICE", '",').concat(w, ",").concat(JSON.stringify(i), ");"))}},o = {navigateTo: function () {var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},n = e.url;a("navigateTo", {url: encodeURI(n)})},navigateBack: function () {var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},n = e.delta;a("navigateBack", {delta: parseInt(n) || 1})},switchTab: function () {var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},n = e.url;a("switchTab", {url: encodeURI(n)})},reLaunch: function () {var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},n = e.url;a("reLaunch", {url: encodeURI(n)})},redirectTo: function () {var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},n = e.url;a("redirectTo", {url: encodeURI(n)})},getEnv: function (e) {window.plus ? e({plus: !0}) : e({h5: !0})},postMessage: function () {var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};a("postMessage", e.data || {})}},r = /uni-app/i.test(navigator.userAgent),d = /Html5Plus/i.test(navigator.userAgent),s = /complete|loaded|interactive/;var w = window.my && navigator.userAgent.indexOf("AlipayClient") > -1;var u = window.swan && window.swan.webView && /swan/i.test(navigator.userAgent);var c = window.qq && window.qq.miniProgram && /QQ/i.test(navigator.userAgent) && /miniProgram/i.test(navigator.userAgent);var g = window.tt && window.tt.miniProgram && /toutiaomicroapp/i.test(navigator.userAgent);var v = window.wx && window.wx.miniProgram && /micromessenger/i.test(navigator.userAgent) && /miniProgram/i.test(navigator.userAgent);var p = window.qa && /quickapp/i.test(navigator.userAgent);for (var l, _ = function () {window.UniAppJSBridge = !0, document.dispatchEvent(new CustomEvent("UniAppJSBridgeReady", {bubbles: !0,cancelable: !0}))}, f = [function (e) {if (r || d) return window.__dcloud_weex_postMessage || window.__dcloud_weex_ ? document.addEventListener("DOMContentLoaded", e) : window.plus && s.test(document.readyState) ? setTimeout(e, 0) : document.addEventListener("plusready", e), o}, function (e) {if (v) return window.WeixinJSBridge && window.WeixinJSBridge.invoke ? setTimeout(e, 0) : document.addEventListener("WeixinJSBridgeReady", e), window.wx.miniProgram}, function (e) {if (c) return window.QQJSBridge && window.QQJSBridge.invoke ? setTimeout(e, 0) : document.addEventListener("QQJSBridgeReady", e), window.qq.miniProgram}, function (e) {if (w) {document.addEventListener("DOMContentLoaded", e);var n = window.my;return {navigateTo: n.navigateTo,navigateBack: n.navigateBack,switchTab: n.switchTab,reLaunch: n.reLaunch,redirectTo: n.redirectTo,postMessage: n.postMessage,getEnv: n.getEnv}}}, function (e) {if (u) return document.addEventListener("DOMContentLoaded", e), window.swan.webView}, function (e) {if (g) return document.addEventListener("DOMContentLoaded", e), window.tt.miniProgram}, function (e) {if (p) {window.QaJSBridge && window.QaJSBridge.invoke ? setTimeout(e, 0) : document.addEventListener("QaJSBridgeReady", e);var n = window.qa;return {navigateTo: n.navigateTo,navigateBack: n.navigateBack,switchTab: n.switchTab,reLaunch: n.reLaunch,redirectTo: n.redirectTo,postMessage: n.postMessage,getEnv: n.getEnv}}}, function (e) {return document.addEventListener("DOMContentLoaded", e), o}], m = 0; m < f.length && !(l = f[m](_)); m++);l || (l = {});var E = "undefined" != typeof webUni ? webUni : {};if (!E.navigateTo)for (var b in l) t(l, b) && (E[b] = l[b]);return E.webView = l, E
}));

这里将Uni方法换位了webUni

调用

webUni.postMessage({data: {randstr: res.randstr,ticket: res.ticket}});

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/745168.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

绘制双Y轴图

双Y轴图可以比较不同度量、展示数据相关性、统一时间序列、强调差异性、增强可读性等方面有重要作用,本案例展示了一种简单的双Y轴绘制方法,可以根据具体项目的要求,增加参数设置。1.导入数据库 import pandas as pd import matplotlib.pyplot as plt import numpy as np pl…

服务注册/发现-Eureka-微服务核心组件【分布式微服务笔记02】

服务注册/发现-Eureka-微服务核心组件【分布式微服务笔记02】 服务注册/发现-Eureka 目前主流的服务注册&发现的组件是Nacos, 但是Eureka 作为一个老牌经典的服务注册&发现技术还是有必要学习一下, 原因:一些早期的分布式微服务项目使用的是Eureka,在工作中, 完全有可…

Toshiba东芝硬盘开盘数据恢复

一、开盘数据恢复的前提 当硬盘出现物理性损坏,如磁头损坏、盘片划伤等,导致数据无法通过常规手段读取时,开盘数据恢复成为唯一可行的选择。 需要明确的是,开盘数据恢复应在数据无法通过恢复或其他非开盘手段解决的情况下进行。 二、开盘数据恢复的步骤 准备阶段 在无尘环境…

磁头损坏的修复方法有哪些

一、更换磁头 购配件盘:首先,需购一块与故障硬盘同型号、同批次或同时期的配件盘。这是因为磁头的规格和兼容性对于修复成功至关重要。 无尘室操作:在无尘室环境下进行操作,以防止灰尘等杂质对硬盘内部造成进一步污染。 更换磁头:将故障硬盘的磁头取下,并替换为配件盘上的…

关于三星SSD移动硬盘的维修与数据恢复

通常涉及多个方面,包括故障诊断、硬件维修以及数据恢复等。 一、故障诊断 检查连接: 确保SSD移动硬盘与计算机的连接是稳定的,检查数据线是否损坏或接触不良。 尝试更换不同的USB端口或电脑进行测试,以排除USB接口问题。 电源检查: 确认移动硬盘的电源供应是否正常,特别是…

硬盘如何维修数据恢复

一、硬盘维修方法 检查硬件连接: 确保硬盘与计算机的连接线(如SATA线、电源线)插紧且没有损坏。 尝试更换连接线或使用主板上的其他接口,以排除连接线或接口故障的可能性。 使用系统自带工具: 在Windows系统中,可以使用“磁盘检查”工具(chkdsk)来检测和修复硬盘上的文…

产品探秘:智影AI——你的创意视频制作神器!

从文字到图片再到视频的智能创作工具。只需3步,把小说变成视频。免费试用,首次注册赠送600积分。只需3步,把小说变成视频。免费试用,首次注册赠送600积分。 https://icomicai.com/在这个快节奏的时代,创意与效率并重成为了我们追求的新风尚。今天,就让我带你一起揭秘一款颠…

如何在Mac上隐藏APP? 在Mac上隐藏不用的APP小技巧

在Mac电脑中我们每天要使用很多APP,虽然Mac切换APP窗口的快捷键非常方便,但同时使用几个APP窗口是不是特别容易搞混?看起来乱糟糟的。下面我们分享在Mac上隐藏不用的APP小技巧,让用户摆脱混乱的APP窗口。 1、在Mac电脑中,打开你想要保留的APP;2、点击屏幕顶部菜单栏中APP…

帝国cms、以下状况或错误提示,是没有按照安装说明中讲的“初始化内置数据”这个步骤操作的原因:

1、增加信息提示“建立目录不成功!请检查目录权限”; 2、除了首页外,其他页面都打不开; 3、页面的CSS地址错误。本文来自博客园,作者:黄文Rex,转载请注明原文链接:https://www.cnblogs.com/hwrex/p/18306966

DC8渗透报告

概述测试目的测试范围序号系统IP1本机192.168.152.1282DC8192.168.152.139详细测试流程1、发现测试目标2、信息收集3、漏洞利用sqlmap -u http://192.168.152.139?nid=1 --random-agent --level 3 --risk 3 --current-db --is-dba --batch –dbs发现不是dba有2个数据库然后逐步…

使用forEach循环异步方法,导致使用深拷贝时,得不到最新数据,控制台会打印出最新的数据

解决forEach不能处理异步方法问题在使用forEach循环遍历一个数组,如果循环时有异步方法,会导致最终深拷贝得不到最新数据,但是控制台会打印最新的数据 `const arr = [ { name: "Jone", age: 18 }, { name: "Tom", age: 15 }, { name: "Liu", …

Mac ssh自动输入密码

1. 需要在Mac上安装expect,如果已经安装过可以省略这一步 Mac 上安装一般是使用homebrew安装,在终端上输入brew install expect可以安装,如果还未安装过homebrew的朋友参考https://www.cnblogs.com/orzs/p/18306760或自行百度。2. 编写脚本 第一个脚本autossh.exp#!/usr/bin…