diff --git a/lib/apis.js b/lib/apis.js index 871d21ff350e7dd1cdffe66e780c0fe7bf50d2a4..a9483e0332388f6142e93fca67cec202043d7c9d 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 dd2d2a63eed9047fdba3f41063ff5f88ab8a0204..b48bc25ce44a884f50eae83ad98e8db86035483d 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 b167849663ec7562e5ddb5dd8b2f05758982ea65..8338f60ba2676ec18d24000c2963b543383e8d06 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 0000000000000000000000000000000000000000..8af7d9edf17842d8c072d57037aa6ece70b1eaa0 --- /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 +}