基于Vue的SPA动态修改页面title的方法

最近基于VUE做个SPA手机端web发现动态修改页面标题通过document.title=xxxx 来修改着实蛋疼,而且在IOS的微信端据说没效果。百度发现要针对IOS的微信做点额外的操作,即:创建一个隐藏的Iframe,然后随便加载一个图片文件,然后加载完成移除,这样就能修改页面title了。网上有几种方案:

1,App.Vue里面设置title属性,然后页面title去绑定,所有子组件修改标题就通过 this.$root.data.title=xxxxx;去修改

缺点:App.Vue默认的el只是body的一个DIV,这样干需要绑定整个html

2,通过自定义指令实现

1
2
3
4
5
6
Vue.directive('title', {
  inserted: function (el, binding) {
    document.title = el.innerText
    el.remove()
  }
})

调用方法:<div v-title>标题内容</div>
优点:这样自定义程度较大(暂且不讨论IOS微信端是否能修改成功)
缺点:无法满足某些JS方法中修改页面标题的需求,例如页面为一个websocket的页面,收到消息要动态显示页面标题这时候频繁去修改div绑定的text并不恰当

针对网上查到的上面两种方法,我进行了合并,利用vue的插件实现SPA的页面标题修改:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var plugin={};
plugin.install=function(Vue,options){
    Vue.prototype.$title=function(title){
        document.title=title;
        var iframe=document.createElement("iframe");
        iframe.style.display='none';
        iframe.setAttribute('src','/e.png');
        var loadedCallback=()=>{
            iframe.removeEventListener('load',loadedCallback);
            document.body.removeChild(iframe);
        };
        iframe.addEventListener('load',loadedCallback);
        document.body.appendChild(iframe);
    };
};
module.exports=plugin;

调用方法:this.$title('xxxxxx');当然你可以替换为一个绑定的变量,然后watch进行实时调整,
个人感觉这种方案较上面的两种方法灵活度更高,有其他方案的欢迎留言,谢谢!

posted on   Я!ńɡ  阅读(1327)  评论(0编辑  收藏  举报

编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
TOP
点击右上角即可分享
微信分享提示