You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MacOS Firefox与Safari中修改document.title导致cursor从pointer重置为default

问题原因与解决方案

问题原因

这是MacOS平台下Firefox和Safari的专属行为:当通过document.title修改窗口标题时,浏览器会触发窗口标题栏的UI更新流程,这个过程会干扰页面元素的:hover状态检测逻辑。此时光标虽然仍停留在按钮上,但浏览器不会再识别该元素处于:hover状态,导致cursor: pointer的样式失效,光标变回默认的default,直到光标离开按钮并重新进入,才会重新触发:hover状态。

其他浏览器(如MacOS Chrome、Windows全平台浏览器)没有这个UI更新与元素状态检测的冲突逻辑,所以不会出现该问题。

解决方案

方案1:直接给按钮设置默认cursor(推荐)

不需要依赖:hover伪类,直接为按钮设置全局的cursor: pointer,这样无论hover状态是否被干扰,光标都会保持指针样式:

button {
  cursor: pointer;
}

#plus-one {
  width: 10rem;
  height: 8rem;
}

方案2:手动触发hover状态重绘(适合必须依赖:hover的场景)

如果一定要保留:hover的写法,可以在修改标题后,通过JS强制浏览器重新识别按钮的hover状态:

var count = 0;

const counter = document.getElementById("counter");
const btn = document.getElementById("plus-one");

btn.addEventListener("click", () => {
  count++;
  counter.innerHTML = count;
  document.title = `Now is ${count}`;
  
  // 强制重绘,触发hover状态重新检测
  if (btn.matches(':hover')) {
    // 先临时修改样式触发重绘
    btn.style.cursor = 'default';
    // 强制浏览器计算布局,触发重绘
    void btn.offsetWidth;
    // 恢复指针样式
    btn.style.cursor = 'pointer';
  }
})

对应的CSS可以保留原写法:

button:hover {
  cursor: pointer;
}

#plus-one {
  width: 10rem;
  height: 8rem;
}

内容的提问来源于stack exchange,提问作者Oliver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 20:12:38