diff --git a/packages/playground/ssr/src/pages.json b/packages/playground/ssr/src/pages.json index bf32f65d10af8aa94e12fdb94145c43d20ce7feb..e1d1666903079c4a781d7ebaf2f8722a95615b91 100644 --- a/packages/playground/ssr/src/pages.json +++ b/packages/playground/ssr/src/pages.json @@ -3,7 +3,7 @@ { "path": "pages/index/index", "style": { - "navigationBarTitleText": "uni-app" + "navigationBarTitleText": "ssr" } } ], @@ -13,4 +13,4 @@ "navigationBarBackgroundColor": "#F8F8F8", "backgroundColor": "#F8F8F8" } -} +} diff --git a/packages/uni-app/dist/uni-app.cjs.js b/packages/uni-app/dist/uni-app.cjs.js index a834ee3a7d2e92c4c7ce124295318eeaa9c260bd..ccde103250df0c637ab76aff2f8da8b698ff16fd 100644 --- a/packages/uni-app/dist/uni-app.cjs.js +++ b/packages/uni-app/dist/uni-app.cjs.js @@ -117,7 +117,7 @@ const onError = /*#__PURE__*/ createHook(ON_ERROR); const onThemeChange = /*#__PURE__*/ createHook(ON_THEME_CHANGE); const onPageNotFound = /*#__PURE__*/ createHook(ON_PAGE_NOT_FOUND); const onUnhandledRejection = /*#__PURE__*/ createHook(ON_UNHANDLE_REJECTION); -// export const onLoad = /*#__PURE__*/ createHook(ON_LOAD) + const onReady = /*#__PURE__*/ createHook(ON_READY); const onUnload = /*#__PURE__*/ createHook(ON_UNLOAD); const onResize = /*#__PURE__*/ createHook(ON_RESIZE); diff --git a/packages/uni-app/dist/uni-app.es.js b/packages/uni-app/dist/uni-app.es.js index 00ab56a6260595e650a95231cf9d363dfde92caf..32fba22addde471952aac91a854a9900a8647262 100644 --- a/packages/uni-app/dist/uni-app.es.js +++ b/packages/uni-app/dist/uni-app.es.js @@ -82,7 +82,7 @@ const onError = /*#__PURE__*/ createHook(ON_ERROR); const onThemeChange = /*#__PURE__*/ createHook(ON_THEME_CHANGE); const onPageNotFound = /*#__PURE__*/ createHook(ON_PAGE_NOT_FOUND); const onUnhandledRejection = /*#__PURE__*/ createHook(ON_UNHANDLE_REJECTION); -// export const onLoad = /*#__PURE__*/ createHook(ON_LOAD) + const onReady = /*#__PURE__*/ createHook(ON_READY); const onUnload = /*#__PURE__*/ createHook(ON_UNLOAD); const onResize = /*#__PURE__*/ createHook(ON_RESIZE); diff --git a/packages/uni-h5/dist/uni-h5.cjs.js b/packages/uni-h5/dist/uni-h5.cjs.js index 69fce916a8cca4b1ce90d93f8fb70576dd2f3364..f5d2aa8085e0011163ec14a7a5548dcbc19f282c 100644 --- a/packages/uni-h5/dist/uni-h5.cjs.js +++ b/packages/uni-h5/dist/uni-h5.cjs.js @@ -10866,8 +10866,11 @@ function createRightWindowTsx(rightWindow, layoutState, windowState) { } } function useDocumentTitle(pageMeta) { + const ctx = vue.useSSRContext(); function update() { - document.title = pageMeta.navigationBar.titleText; + { + ctx[uniShared.UNI_SSR_TITLE] = pageMeta.navigationBar.titleText; + } } vue.watchEffect(update); } diff --git a/packages/uni-h5/dist/uni-h5.es.js b/packages/uni-h5/dist/uni-h5.es.js index 00f8332778bd6341d13be0078bb847d064623097..8bde7f8922b31d598d8e1b74c05e989e52e51fc5 100644 --- a/packages/uni-h5/dist/uni-h5.es.js +++ b/packages/uni-h5/dist/uni-h5.es.js @@ -1,5 +1,5 @@ import {isFunction, extend, hyphenate, isPlainObject, isString, isArray, hasOwn, isObject, capitalize, toRawType, makeMap as makeMap$1, isPromise, invokeArrayFns as invokeArrayFns$1} from "@vue/shared"; -import {injectHook, withModifiers, createVNode, getCurrentInstance, inject, provide, reactive, openBlock, createBlock, mergeProps, toDisplayString, defineComponent, ref, computed, watch, onUnmounted, onBeforeUnmount, onActivated, onMounted, nextTick, onBeforeMount, withDirectives, vShow, shallowRef, watchEffect, isVNode, Fragment, markRaw, createTextVNode, onBeforeActivate, onBeforeDeactivate, renderList, onDeactivated, Teleport, createApp, Transition, withCtx, KeepAlive, resolveDynamicComponent, resolveComponent, createCommentVNode, renderSlot} from "vue"; +import {injectHook, withModifiers, createVNode, getCurrentInstance, inject, provide, reactive, openBlock, createBlock, mergeProps, toDisplayString, defineComponent, ref, computed, watch, onUnmounted, onBeforeUnmount, onActivated, onMounted, nextTick, onBeforeMount, withDirectives, vShow, shallowRef, watchEffect, isVNode, Fragment, markRaw, createTextVNode, onBeforeActivate, onBeforeDeactivate, renderList, onDeactivated, Teleport, createApp, Transition, withCtx, KeepAlive, resolveDynamicComponent, resolveComponent, createCommentVNode, renderSlot, useSSRContext} from "vue"; import {once, passive, normalizeTarget, isBuiltInComponent, initCustomDataset, invokeArrayFns, NAVBAR_HEIGHT, parseQuery, PRIMARY_COLOR, debounce, getCustomDataset, callOptions, removeLeadingSlash, getLen, ON_REACH_BOTTOM_DISTANCE, decodedQuery, updateElementStyle, addFont, scrollTo, RESPONSIVE_MIN_WIDTH, formatDateTime} from "@dcloudio/uni-shared"; import {initVueI18n, LOCALE_EN, LOCALE_ES, LOCALE_FR, LOCALE_ZH_HANS, LOCALE_ZH_HANT} from "@dcloudio/uni-i18n"; import {useRoute, createRouter, createWebHistory, createWebHashHistory, useRouter, isNavigationFailure, RouterView} from "vue-router"; @@ -15766,6 +15766,7 @@ function useKeyboard() { if (res) { key.value = res; } + nextTick(() => key.value = ""); }; onMounted(() => { document.addEventListener("keyup", onKeyup); @@ -19967,8 +19968,11 @@ const UniServiceJSBridge$1 = /* @__PURE__ */ extend(ServiceJSBridge, { } }); function useDocumentTitle(pageMeta) { + useSSRContext(); function update() { - document.title = pageMeta.navigationBar.titleText; + { + document.title = pageMeta.navigationBar.titleText; + } } watchEffect(update); onActivated(update); diff --git a/packages/uni-h5/src/helpers/useDocumentTitle.ts b/packages/uni-h5/src/helpers/useDocumentTitle.ts index f9a8f2c124ebcc964c8fc79d413138e6b49d0f50..7c88a3c5734d669dbbd0042c0b86c4d9fd3d405e 100644 --- a/packages/uni-h5/src/helpers/useDocumentTitle.ts +++ b/packages/uni-h5/src/helpers/useDocumentTitle.ts @@ -1,8 +1,13 @@ -import { watchEffect, onActivated } from 'vue' - +import { watchEffect, onActivated, useSSRContext } from 'vue' +import { UNI_SSR_TITLE } from '@dcloudio/uni-shared' export function useDocumentTitle(pageMeta: UniApp.PageRouteMeta) { + const ctx = useSSRContext() function update() { - document.title = pageMeta.navigationBar.titleText! + if (__NODE_JS__) { + ctx![UNI_SSR_TITLE] = pageMeta.navigationBar.titleText + } else { + document.title = pageMeta.navigationBar.titleText! + } } watchEffect(update) onActivated(update) diff --git a/packages/uni-shared/dist/uni-shared.cjs.js b/packages/uni-shared/dist/uni-shared.cjs.js index 35f426dc5e56c12ca61a2f3823fd20fe7b217590..6cf75448178c3682bc8af495e08bf3dc9bc9b3c4 100644 --- a/packages/uni-shared/dist/uni-shared.cjs.js +++ b/packages/uni-shared/dist/uni-shared.cjs.js @@ -382,6 +382,7 @@ const RESPONSIVE_MIN_WIDTH = 768; const COMPONENT_NAME_PREFIX = 'VUni'; const PRIMARY_COLOR = '#007aff'; const UNI_SSR = '__uniSSR'; +const UNI_SSR_TITLE = 'title'; const UNI_SSR_STORE = 'store'; const UNI_SSR_DATA = 'data'; const UNI_SSR_GLOBAL_DATA = 'globalData'; @@ -407,6 +408,7 @@ exports.UNI_SSR = UNI_SSR; exports.UNI_SSR_DATA = UNI_SSR_DATA; exports.UNI_SSR_GLOBAL_DATA = UNI_SSR_GLOBAL_DATA; exports.UNI_SSR_STORE = UNI_SSR_STORE; +exports.UNI_SSR_TITLE = UNI_SSR_TITLE; exports.addFont = addFont; exports.callOptions = callOptions; exports.createRpx2Unit = createRpx2Unit; diff --git a/packages/uni-shared/dist/uni-shared.d.ts b/packages/uni-shared/dist/uni-shared.d.ts index bd68092840000a3be88b2e5da1735acfdf874178..b959c7e4ab6066bf7678e597e61fd69348ce8c23 100644 --- a/packages/uni-shared/dist/uni-shared.d.ts +++ b/packages/uni-shared/dist/uni-shared.d.ts @@ -131,6 +131,8 @@ export declare const UNI_SSR_GLOBAL_DATA = "globalData"; export declare const UNI_SSR_STORE = "store"; +export declare const UNI_SSR_TITLE = "title"; + export declare function updateElementStyle(element: HTMLElement, styles: Partial): void; export { } diff --git a/packages/uni-shared/dist/uni-shared.es.js b/packages/uni-shared/dist/uni-shared.es.js index de524b408a7fc292aef201d6c407e66e1872bf18..c6875e54f6973960457bc8ff8e50691ac4895485 100644 --- a/packages/uni-shared/dist/uni-shared.es.js +++ b/packages/uni-shared/dist/uni-shared.es.js @@ -378,6 +378,7 @@ const RESPONSIVE_MIN_WIDTH = 768; const COMPONENT_NAME_PREFIX = 'VUni'; const PRIMARY_COLOR = '#007aff'; const UNI_SSR = '__uniSSR'; +const UNI_SSR_TITLE = 'title'; const UNI_SSR_STORE = 'store'; const UNI_SSR_DATA = 'data'; const UNI_SSR_GLOBAL_DATA = 'globalData'; @@ -388,4 +389,4 @@ function getEnvLocale() { return (lang && lang.replace(/[.:].*/, '')) || 'en'; } -export { BUILT_IN_TAGS, COMPONENT_NAME_PREFIX, COMPONENT_PREFIX, COMPONENT_SELECTOR_PREFIX, NAVBAR_HEIGHT, ON_REACH_BOTTOM_DISTANCE, PLUS_RE, PRIMARY_COLOR, RESPONSIVE_MIN_WIDTH, TABBAR_HEIGHT, TAGS, UNI_SSR, UNI_SSR_DATA, UNI_SSR_GLOBAL_DATA, UNI_SSR_STORE, addFont, callOptions, createRpx2Unit, debounce, decode, decodedQuery, defaultRpx2Unit, formatDateTime, getCustomDataset, getEnvLocale, getLen, initCustomDataset, invokeArrayFns, isBuiltInComponent, isCustomElement, isNativeTag, normalizeDataset, normalizeTarget, once, parseQuery, passive, plusReady, removeLeadingSlash, sanitise, scrollTo, stringifyQuery, updateElementStyle }; +export { BUILT_IN_TAGS, COMPONENT_NAME_PREFIX, COMPONENT_PREFIX, COMPONENT_SELECTOR_PREFIX, NAVBAR_HEIGHT, ON_REACH_BOTTOM_DISTANCE, PLUS_RE, PRIMARY_COLOR, RESPONSIVE_MIN_WIDTH, TABBAR_HEIGHT, TAGS, UNI_SSR, UNI_SSR_DATA, UNI_SSR_GLOBAL_DATA, UNI_SSR_STORE, UNI_SSR_TITLE, addFont, callOptions, createRpx2Unit, debounce, decode, decodedQuery, defaultRpx2Unit, formatDateTime, getCustomDataset, getEnvLocale, getLen, initCustomDataset, invokeArrayFns, isBuiltInComponent, isCustomElement, isNativeTag, normalizeDataset, normalizeTarget, once, parseQuery, passive, plusReady, removeLeadingSlash, sanitise, scrollTo, stringifyQuery, updateElementStyle }; diff --git a/packages/uni-shared/src/constants.ts b/packages/uni-shared/src/constants.ts index 46abb9830e01b3a312d9cb45dd73b5ec70c932cd..bad31a99a28f74f52790bc0aee76a82e54d05f2e 100644 --- a/packages/uni-shared/src/constants.ts +++ b/packages/uni-shared/src/constants.ts @@ -8,6 +8,7 @@ export const COMPONENT_NAME_PREFIX = 'VUni' export const PRIMARY_COLOR = '#007aff' export const UNI_SSR = '__uniSSR' +export const UNI_SSR_TITLE = 'title' export const UNI_SSR_STORE = 'store' export const UNI_SSR_DATA = 'data' export const UNI_SSR_GLOBAL_DATA = 'globalData' diff --git a/packages/vite-plugin-uni/lib/ssr/entry-server.js b/packages/vite-plugin-uni/lib/ssr/entry-server.js index 367a42deef09310949951e411a093394f2096586..e33f14c0127cf3292318a074c7910510c71ea7d7 100644 --- a/packages/vite-plugin-uni/lib/ssr/entry-server.js +++ b/packages/vite-plugin-uni/lib/ssr/entry-server.js @@ -4,6 +4,7 @@ import { UNI_SSR, UNI_SSR_DATA, UNI_SSR_STORE, + UNI_SSR_TITLE, UNI_SSR_GLOBAL_DATA, } from '@dcloudio/uni-shared' import { plugin } from '@dcloudio/uni-h5' @@ -39,7 +40,7 @@ export async function render(url, manifest = {}) { __uniSSR[UNI_SSR_STORE] = store.state } const appContext = renderAppContext(ctx) - return [html, preloadLinks, appContext] + return [html, preloadLinks, appContext, ctx[UNI_SSR_TITLE] || ''] } function renderPreloadLinks(modules, manifest) { diff --git a/packages/vite-plugin-uni/src/cli/server.ts b/packages/vite-plugin-uni/src/cli/server.ts index 7e2f1727a7cc901535c20c9dc62f496f071e049e..fca576fcdad8e55cb72e919f89e8d9c7030750b8 100644 --- a/packages/vite-plugin-uni/src/cli/server.ts +++ b/packages/vite-plugin-uni/src/cli/server.ts @@ -63,9 +63,10 @@ export async function createSSRServer(options: CliOptions & ServerOptions) { ) ).render - const [appHtml, preloadLinks, appContext] = await render(url) + const [appHtml, preloadLinks, appContext, title] = await render(url) const html = template + .replace(/(.*?)<\/title>/, `<title>${title}`) .replace(``, preloadLinks) .replace(``, appHtml) .replace(``, appContext)