uni-app H5全局修改浏览器的标题,不让他自动将document.title修改为navigationBarTitleText
uni-app H5全局修改浏览器的标题,不让他自动将document.title修改为navigationBarTitleText
6 回复
设置了 所有地方都变了 现在想让uni里面的title是pages.json document.title不变
同问 如何解决的
在uni-app中,当你开发H5应用时,默认情况下,页面的标题(即 document.title
)会被 navigationBarTitleText
的值自动修改。如果你希望全局控制浏览器的标题,避免它被 navigationBarTitleText
自动覆盖,可以通过编程方式手动设置 document.title
。
以下是一个实现这一需求的代码案例:
- 修改
App.vue
文件:
在 App.vue
中,你可以使用 onShow
生命周期钩子来确保每次页面显示时都设置你想要的标题。同时,你可以通过监听页面的路由变化来动态更新标题。
<template>
<App />
</template>
<script>
export default {
onShow() {
this.updateTitle('默认标题');
// 监听路由变化,更新标题
if (window.addEventListener) {
window.addEventListener('hashchange', this.updateTitleOnRouteChange, false);
} else if (window.attachEvent) {
window.attachEvent('onhashchange', this.updateTitleOnRouteChange);
}
},
methods: {
updateTitle(title) {
document.title = title;
},
updateTitleOnRouteChange() {
// 根据当前路由设置标题,这里可以添加你的逻辑
// 例如,根据路由地址的不同设置不同的标题
const currentPage = getCurrentPages()[getCurrentPages().length - 1];
const routeTitle = currentPage.route.replace(/^\//, '').replace(/\//g, ' - ');
this.updateTitle(`应用名称 - ${routeTitle}`);
}
},
beforeDestroy() {
// 移除监听器
if (window.removeEventListener) {
window.removeEventListener('hashchange', this.updateTitleOnRouteChange, false);
} else if (window.detachEvent) {
window.detachEvent('onhashchange', this.updateTitleOnRouteChange);
}
}
}
</script>
- 页面级别的标题设置:
在每个页面中,如果你需要覆盖全局设置的标题,你可以在页面的 onLoad
或 onShow
钩子中调用 updateTitle
方法。
<script>
export default {
onLoad() {
// 根据需要设置页面标题
document.title = '特定页面的标题';
}
}
</script>
注意:在 App.vue
中,我们使用了 getCurrentPages
方法来获取当前显示的页面,并通过 route
属性来动态生成标题。这种方法在路由变化时非常有用,但你需要根据你的应用逻辑来调整标题的生成方式。
通过这种方式,你可以全局控制uni-app H5应用在浏览器中的标题,避免它被 navigationBarTitleText
自动修改。