From 1e0a8c6d99d0ac680907f4046e786bd51dab4c47 Mon Sep 17 00:00:00 2001 From: fxy060608 Date: Fri, 1 Nov 2019 12:40:04 +0800 Subject: [PATCH] feat(v3): add getSubNVueById --- lib/apis.js | 4 +- .../app-plus/runtime/api/sub-nvue.js | 4 ++ src/platforms/app-plus/service/api/index.js | 3 +- .../app-plus/service/api/plugin/sub-nvue.js | 70 +++++++++++++++++++ 4 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 src/platforms/app-plus/service/api/plugin/sub-nvue.js diff --git a/lib/apis.js b/lib/apis.js index 871d21ff3..a9483e033 100644 --- a/lib/apis.js +++ b/lib/apis.js @@ -192,7 +192,9 @@ const third = [ 'offPush', 'requireNativePlugin', 'upx2px', - 'restoreGlobal' + 'restoreGlobal', + 'getSubNVueById', + 'getCurrentSubNVue' ] const apis = [ diff --git a/src/platforms/app-plus/runtime/api/sub-nvue.js b/src/platforms/app-plus/runtime/api/sub-nvue.js index dd2d2a63e..b48bc25ce 100644 --- a/src/platforms/app-plus/runtime/api/sub-nvue.js +++ b/src/platforms/app-plus/runtime/api/sub-nvue.js @@ -67,4 +67,8 @@ export function getSubNVueById (id) { wrapper(webview) } return webview +} + +export function getCurrentSubNVue () { + return getSubNVueById(plus.webview.currentWebview().id) } diff --git a/src/platforms/app-plus/service/api/index.js b/src/platforms/app-plus/service/api/index.js index b16784966..8338f60ba 100644 --- a/src/platforms/app-plus/service/api/index.js +++ b/src/platforms/app-plus/service/api/index.js @@ -44,7 +44,8 @@ export * from './plugin/payment' export * from './plugin/push' export * from './plugin/require-native-plugin' export * from './plugin/share' -export * from './plugin/restore-global' +export * from './plugin/restore-global' +export * from './plugin/sub-nvue' export * from './route/navigate-back' export * from './route/navigate-to' diff --git a/src/platforms/app-plus/service/api/plugin/sub-nvue.js b/src/platforms/app-plus/service/api/plugin/sub-nvue.js new file mode 100644 index 000000000..8af7d9edf --- /dev/null +++ b/src/platforms/app-plus/service/api/plugin/sub-nvue.js @@ -0,0 +1,70 @@ +import { + requireNativePlugin +} from './require-native-plugin' + +function wrapper (webview) { + webview.$processed = true + + webview.postMessage = function (data) { + plus.webview.postMessageToUniNView({ + type: 'UniAppSubNVue', + data + }, webview.id) + } + let callbacks = [] + webview.onMessage = function (callback) { + callbacks.push(callback) + } + webview.$consumeMessage = function (e) { + callbacks.forEach(callback => callback(e)) + } + + if (!webview.__uniapp_mask_id) { + return + } + const maskColor = webview.__uniapp_mask + let maskWebview = webview.__uniapp_mask_id === '0' ? { + setStyle ({ + mask + }) { + requireNativePlugin('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() + callbacks = [] + return oldClose.apply(webview, args) + } +} + +export function getSubNVueById (id) { + const webview = plus.webview.getWebviewById(id) + if (webview && !webview.$processed) { + wrapper(webview) + } + return webview +} -- GitLab