on-webview-ready.js 1.6 KB
Newer Older
fxy060608's avatar
fxy060608 已提交
1 2 3 4 5 6 7 8 9 10
import {
  preloadWebview,
  setPreloadWebview,
  consumeWebviewReady
} from '../webview'

import {
  perf
} from '../perf'

fxy060608's avatar
fxy060608 已提交
11 12
let isLaunchWebviewReady = false // 目前首页双向确定 ready,可能会导致触发两次 onWebviewReady(主要是 Android)

fxy060608's avatar
fxy060608 已提交
13
export default function onWebviewReady (data, pageId) {
fxy060608's avatar
fxy060608 已提交
14
  const isLaunchWebview = pageId === '1'
fxy060608's avatar
fxy060608 已提交
15 16 17 18 19 20
  if (isLaunchWebview && isLaunchWebviewReady) {
    if (process.env.NODE_ENV !== 'production') {
      console.log('[uni-app] onLaunchWebviewReady.prevent')
    }
    return
  }
fxy060608's avatar
fxy060608 已提交
21
  if (isLaunchWebview) { // 首页
fxy060608's avatar
fxy060608 已提交
22
    isLaunchWebviewReady = true
fxy060608's avatar
fxy060608 已提交
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
    setPreloadWebview(plus.webview.getLaunchWebview())
  } else if (!preloadWebview) { // preloadWebview 不存在,重新加载一下
    setPreloadWebview(plus.webview.getWebviewById(pageId))
  }
  if (preloadWebview.id !== pageId) {
    return console.error(`webviewReady[${preloadWebview.id}][${pageId}] not match`)
  }
  preloadWebview.loaded = true // 标记已 ready

  consumeWebviewReady(pageId)

  if (isLaunchWebview) {
    const entryPagePath = '/' + __uniConfig.entryPagePath
    const routeOptions = __uniRoutes.find(route => route.path === entryPagePath)
    if (!routeOptions.meta.isNVue) { // 非 nvue 首页,需要主动跳转
      const navigateType = routeOptions.meta.isTabBar ? 'switchTab' : 'navigateTo'
      process.env.NODE_ENV !== 'production' && perf(`${entryPagePath} navigateTo`)
      return uni[navigateType]({
41
        url: entryPagePath + (__uniConfig.entryPageQuery || ''),
fxy060608's avatar
fxy060608 已提交
42
        openType: 'appLaunch'
fxy060608's avatar
fxy060608 已提交
43 44 45 46
      })
    }
  }
}