uniapp中 app与webview的通讯

2024-06-04 2922阅读

1.app->webview

app发送

此处index.php/tags-602.html" class="superseo">使用evalJS方法


生成评估总结


methods:{
   chatRes() {
		let str="需要发送的信息"
		const _funName = 'msgFromUniapp'
		const _data = {
			msg: str
		};
		const currentWebview = this.$scope.$getAppWebview().children()[0];
		currentWebview.evalJS(`${_funName}(${JSON.stringify(_data)})`);
		},
}

webview接收


	
		
		
		评测记录
	
	
	
	
	
		let msg=''
		window.msgFromUniapp = function(arg) {
			msg=arg.msg
			console.log(msg);
		}
		
	

2.webview->app

webview发送


	
		
		
		评测记录
	
	
		
	
	
	
		const sendMsg = () => { 
            let str="待发送的信息"
			uni.postMessage({
				data: {
					msgContent:str
				}
			})
		}
	

app接收




methods:{
    handlerMessage(event) {
		console.log(event.detail.data[0])
	},
}

3.踩坑记录

webview使用uni.postMessage发送消息给app时报uni.postMessage is not a function

解决方案

  • 取消引入官方库uni-webview-js
  • 改写uni为y_uni,调用y_uni.postMessage
    
    	
    		
    		
    		评测记录
    	
    	
    		
    	
    	
    		let y_uni;
    		! function(e, n) {
    			y_uni = n();
    			return
    			console.log(4777)
    			console.log(n())
    			"object" == typeof exports && "undefined" != typeof module ? module.exports = n() : "function" == typeof define &&
    				define.amd ? define(n) : (e = e || self).y_uni = 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 i(e, i) {
    				return n.call(e, i)
    			}
    			var t = [];
    		
    			function r() {
    				return window.__dcloud_weex_postMessage || window.__dcloud_weex_
    			}
    			var o = function(e, n) {
    					var i = {
    						options: {
    							timestamp: +new Date
    						},
    						name: e,
    						arg: n
    					};
    					if (r()) {
    						if ("postMessage" === e) {
    							var o = {
    								data: [n]
    							};
    							return window.__dcloud_weex_postMessage ? window.__dcloud_weex_postMessage(o) : window
    								.__dcloud_weex_.postMessage(JSON.stringify(o))
    						}
    						var a = {
    							type: "WEB_INVOKE_APPSERVICE",
    							args: {
    								data: i,
    								webviewIds: t
    							}
    						};
    						window.__dcloud_weex_postMessage ? window.__dcloud_weex_postMessageToService(a) : window
    							.__dcloud_weex_.postMessageToService(JSON.stringify(a))
    					}
    					if (!window.plus) return window.parent.postMessage({
    						type: "WEB_INVOKE_APPSERVICE",
    						data: i,
    						pageId: ""
    					}, "*");
    					if (0 === t.length) {
    						var d = plus.webview.currentWebview();
    						if (!d) throw new Error("plus.webview.currentWebview() is undefined");
    						var s = d.parent(),
    							w = "";
    						w = s ? s.id : d.id, t.push(w)
    					}
    					if (plus.webview.getWebviewById("__uniapp__service")) plus.webview.postMessageToUniNView({
    						type: "WEB_INVOKE_APPSERVICE",
    						args: {
    							data: i,
    							webviewIds: t
    						}
    					}, "__uniapp__service");
    					else {
    						var u = JSON.stringify(i);
    						plus.webview.getLaunchWebview().evalJS('UniPlusBridge.subscribeHandler("'.concat(
    							"WEB_INVOKE_APPSERVICE", '",').concat(u, ",").concat(JSON.stringify(t), ");"))
    					}
    				},
    				a = {
    					navigateTo: function() {
    						var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
    							n = e.url;
    						o("navigateTo", {
    							url: encodeURI(n)
    						})
    					},
    					navigateBack: function() {
    						var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
    							n = e.delta;
    						o("navigateBack", {
    							delta: parseInt(n) || 1
    						})
    					},
    					switchTab: function() {
    						var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
    							n = e.url;
    						o("switchTab", {
    							url: encodeURI(n)
    						})
    					},
    					reLaunch: function() {
    						var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
    							n = e.url;
    						o("reLaunch", {
    							url: encodeURI(n)
    						})
    					},
    					redirectTo: function() {
    						var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
    							n = e.url;
    						o("redirectTo", {
    							url: encodeURI(n)
    						})
    					},
    					getEnv: function(e) {
    						r() ? e({
    							nvue: !0
    						}) : window.plus ? e({
    							plus: !0
    						}) : e({
    							h5: !0
    						})
    					},
    					postMessage: function() {
    						var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
    						o("postMessage", e.data || {})
    					}
    				},
    				d = /uni-app/i.test(navigator.userAgent),
    				s = /Html5Plus/i.test(navigator.userAgent),
    				w = /complete|loaded|interactive/;
    			var u = window.my && navigator.userAgent.indexOf(["t", "n", "e", "i", "l", "C", "y", "a", "p", "i", "l",
    				"A"
    			].reverse().join("")) > -1;
    			var g = window.swan && window.swan.webView && /swan/i.test(navigator.userAgent);
    			var v = window.qq && window.qq.miniProgram && /QQ/i.test(navigator.userAgent) && /miniProgram/i.test(
    				navigator.userAgent);
    			var c = window.tt && window.tt.miniProgram && /toutiaomicroapp/i.test(navigator.userAgent);
    			var m = window.wx && window.wx.miniProgram && /micromessenger/i.test(navigator.userAgent) &&
    				/miniProgram/i
    				.test(navigator.userAgent);
    			var p = window.qa && /quickapp/i.test(navigator.userAgent);
    			var f = window.ks && window.ks.miniProgram && /micromessenger/i.test(navigator.userAgent) &&
    				/miniProgram/i
    				.test(navigator.userAgent);
    			var l = window.tt && window.tt.miniProgram && /Lark|Feishu/i.test(navigator.userAgent);
    			var _ = window.jd && window.jd.miniProgram && /micromessenger/i.test(navigator.userAgent) &&
    				/miniProgram/i
    				.test(navigator.userAgent);
    			var E = window.xhs && window.xhs.miniProgram && /xhsminiapp/i.test(navigator.userAgent);
    			for (var h, P = function() {
    					window.UniAppJSBridge = !0, document.dispatchEvent(new CustomEvent("UniAppJSBridgeReady", {
    						bubbles: !0,
    						cancelable: !0
    					}))
    				}, b = [function(e) {
    					if (d || s) return window.__dcloud_weex_postMessage || window.__dcloud_weex_ ? document
    						.addEventListener("DOMContentLoaded", e) : window.plus && w.test(document
    							.readyState) ? setTimeout(e, 0) : document.addEventListener("plusready", e), a
    				}, function(e) {
    					if (m) return window.WeixinJSBridge && window.WeixinJSBridge.invoke ? setTimeout(e, 0) :
    						document.addEventListener("WeixinJSBridgeReady", e), window.wx.miniProgram
    				}, function(e) {
    					if (v) return window.QQJSBridge && window.QQJSBridge.invoke ? setTimeout(e, 0) : document
    						.addEventListener("QQJSBridgeReady", e), window.qq.miniProgram
    				}, function(e) {
    					if (u) {
    						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 (g) return document.addEventListener("DOMContentLoaded", e), window.swan.webView
    				}, function(e) {
    					if (c) 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) {
    					if (f) return window.WeixinJSBridge && window.WeixinJSBridge.invoke ? setTimeout(e, 0) :
    						document.addEventListener("WeixinJSBridgeReady", e), window.ks.miniProgram
    				}, function(e) {
    					if (l) return document.addEventListener("DOMContentLoaded", e), window.tt.miniProgram
    				}, function(e) {
    					if (_) return window.JDJSBridgeReady && window.JDJSBridgeReady.invoke ? setTimeout(e, 0) :
    						document.addEventListener("JDJSBridgeReady", e), window.jd.miniProgram
    				}, function(e) {
    					if (E) return window.xhs.miniProgram
    				}, function(e) {
    					return document.addEventListener("DOMContentLoaded", e), a
    				}], y = 0; y  {
    			let str="待发送的信息"
    			y_uni.postMessage({
    				data: {
    					msgContent:str
    				}
    			})
    		}
    	
    

    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]