智能照明系统APP-本地串口
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
LightingSystemApp-serial/.svn/pristine/e5/e5cc97984aa424d53219731ade8...

124 lines
3.0 KiB

const UNIAPP_SERVICE_NVUE_ID = '__uniapp__service'
export function initPostMessage (nvue) {
const plus = nvue.requireModule('plus')
return {
postMessage (data) {
plus.postMessage(data, UNIAPP_SERVICE_NVUE_ID)
}
}
}
export function initSubNVue (nvue, plus, BroadcastChannel) {
let origin
const onMessageCallbacks = []
const postMessage = nvue.requireModule('plus').postMessage
const onSubNVueMessage = function onSubNVueMessage (data) {
onMessageCallbacks.forEach(callback => callback({
origin,
data
}))
}
nvue.requireModule('globalEvent').addEventListener('plusMessage', e => {
if (e.data.type === 'UniAppSubNVue') {
onSubNVueMessage(e.data.data, e.data.options)
}
})
const webviewId = plus.webview.currentWebview().id
const channel = new BroadcastChannel('UNI-APP-SUBNVUE')
channel.onmessage = function (event) {
if (event.data.to === webviewId) {
onSubNVueMessage(event.data.data)
}
}
const wrapper = function wrapper (webview) {
webview.$processed = true
const currentWebviewId = plus.webview.currentWebview().id
const isPopupNVue = currentWebviewId === webview.id
const hostNVueId = webview.__uniapp_origin_type === 'uniNView' && webview.__uniapp_origin_id
const popupNVueId = webview.id
webview.postMessage = function (data) {
if (hostNVueId) {
channel.postMessage({
data,
to: isPopupNVue ? hostNVueId : popupNVueId
})
} else {
postMessage({
type: 'UniAppSubNVue',
data: data
}, UNIAPP_SERVICE_NVUE_ID)
}
}
webview.onMessage = function (callback) {
onMessageCallbacks.push(callback)
}
if (!webview.__uniapp_mask_id) {
return
}
origin = webview.__uniapp_host
const maskColor = webview.__uniapp_mask
const maskWebview = webview.__uniapp_mask_id === '0' ? {
setStyle ({ mask }) {
nvue.requireModule('uni-tabview').setMask({
color: mask
})
}
} : plus.webview.getWebviewById(webview.__uniapp_mask_id)
const oldShow = webview.show
const oldHide = webview.hide
const oldClose = webview.close
const showMask = function () {
maskWebview.setStyle({
mask: maskColor
})
}
const closeMask = function () {
maskWebview.setStyle({
mask: 'none'
})
}
webview.show = function (...args) {
showMask()
return oldShow.apply(webview, args)
}
webview.hide = function (...args) {
closeMask()
return oldHide.apply(webview, args)
}
webview.close = function (...args) {
closeMask()
return oldClose.apply(webview, args)
}
}
const getSubNVueById = function getSubNVueById (id) {
const webview = plus.webview.getWebviewById(id)
if (webview && !webview.$processed) {
wrapper(webview)
}
return webview
}
return {
getSubNVueById,
getCurrentSubNVue () {
return getSubNVueById(plus.webview.currentWebview().id)
}
}
}