JS实现浏览器标签页通知计数时变量不更新、前缀重复问题求助
问题原因
- 前缀重复拼接:每次执行
changeTitle函数时,都直接在当前已带计数前缀的document.title基础上叠加新前缀,导致多次调用后前缀不断重复。 - 计数无法更新:
numb变量仅在脚本初始化时读取了一次notify_count的值,后续notify_count动态更新后numb不会同步变更,且changeTitle逻辑中没有读取最新的通知计数,所以数值一直是旧值。
修复代码
首先需要保存页面原始的无前缀标题,每次更新标题时都基于原始标题拼接最新的计数,同时每次执行逻辑时主动读取最新的notify_count值,修正后代码如下:
// 初始化时存储页面原始标题,避免后续被前缀覆盖 const originalTitle = document.title; function changeTitle() { // 每次都获取最新的未读通知数 const latestCount = notify_count.toString(); // 基于原始标题拼接新的带计数标题 document.title = `(${latestCount}) ${originalTitle}`; } function newUpdate() { // 注意不要重复调用newUpdate,否则会生成多个定时器导致性能问题 setInterval(changeTitle, 2000); }
可选优化:如果未读通知数为0时不需要显示计数前缀,可以调整changeTitle的逻辑:
function changeTitle() { const latestCount = Number(notify_count); if (latestCount > 0) { document.title = `(${latestCount}) ${originalTitle}`; } else { // 计数为0时恢复原始标题 document.title = originalTitle; } }
内容的提问来源于stack exchange,提问作者Ben Leonard
相关产品推荐
相关产品推荐

