近期公司有个需求uniapp开发的APP要嵌套uniapp开发的h5,并且APP后面还要打包H5,这就涉及
app和h5之间的通信,h5和h5之间的通信,期间网上找了很多资料也踩了不少坑,如果不符合这种情况情,请划走
准备工作:
无论是app和h5通信还是 h5和h5之间的通信都是需要引入web-view的sdk文件 我下载的是1.5.2版本,代码如下
!(function (e, n) {
'object' == typeof exports && 'undefined' != typeof module
? (module.exports = n())
: 'function' == typeof define && define.amd
? define(n)
: ((e = e || self).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 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'