问题 在聚焦窗口时更改窗口标题在Chrome中不起作用


我(ab)使用文档标题作为某种通知区域。如果有问题的选项卡/窗口在我想要通知用户某事时没有焦点,我会更改窗口标题以包含一些通知。

当窗口/选项卡重新聚焦时,我想删除通知,即将标题重置为标准。但是,此重置有时在Chrome中无效。

当我来自一个 不同的窗口,标题得到正确更新,但当我来自一个 同一窗口中的不同选项卡,它没有。

我找到了解决方法(我将其作为答案发布),但请分享您可能需要解决的任何其他想法。


7806
2018-06-01 18:47


起源



答案:


这似乎是Chrome中关于实际重新绘制标签标题的错误,因为文档标题本身(即在DOM内)实际上已正确更新。

我想更改选项卡(导致选项卡移动到前景,因此被重绘)并在结果焦点事件中更改标题(这也需要重绘)会导致某种竞争条件。

这就是我尝试这种解决方法的原因,实际上它可以工作:

window.setTimeout(function () { $(document).attr("title", newtitle); }, 200);

- 只需等待很短的时间再更新标题,这样两个重绘事件就不会相互冲突。显然,这并不漂亮,但0.2秒的延迟通常不应成为问题。


14
2018-06-01 18:47



自我接受这个答案;但随意发布更好的修复/解决方法;我仍然可以改变接受的答案 - balpha♦
$(document).attr('title', newtitle)? document.title = newtitle 更简单。 - nyuszika7h
@ Nyuszika7H:我想我确实使用过 document.title = newtitle (我实际上认为我试过两个,以排除jQuery问题的可能性)。无论哪种方式,谁在乎?这两项工作都很清楚,两者都是一样的。 - balpha♦
此外,这甚至不是重点:) - balpha♦


答案:


这似乎是Chrome中关于实际重新绘制标签标题的错误,因为文档标题本身(即在DOM内)实际上已正确更新。

我想更改选项卡(导致选项卡移动到前景,因此被重绘)并在结果焦点事件中更改标题(这也需要重绘)会导致某种竞争条件。

这就是我尝试这种解决方法的原因,实际上它可以工作:

window.setTimeout(function () { $(document).attr("title", newtitle); }, 200);

- 只需等待很短的时间再更新标题,这样两个重绘事件就不会相互冲突。显然,这并不漂亮,但0.2秒的延迟通常不应成为问题。


14
2018-06-01 18:47



自我接受这个答案;但随意发布更好的修复/解决方法;我仍然可以改变接受的答案 - balpha♦
$(document).attr('title', newtitle)? document.title = newtitle 更简单。 - nyuszika7h
@ Nyuszika7H:我想我确实使用过 document.title = newtitle (我实际上认为我试过两个,以排除jQuery问题的可能性)。无论哪种方式,谁在乎?这两项工作都很清楚,两者都是一样的。 - balpha♦
此外,这甚至不是重点:) - balpha♦


虽然tiftik说这个错误是固定的,但它仍然发生在我的Chrome(第21版)上。

解决方案balpha也适用于我 - 但要注意不要将文档标题设置为Focus上的新标题,而是等待200ms再次设置它 - 这不起作用! (可能是因为Chrome认为它是相同的标题,所以它不会更新)

等待200ms并设置它 - 工作正常!


1
2017-09-20 09:41





供将来参考:此错误目前已修复。


0
2017-08-25 20:32



有趣;你有参考吗? - balpha♦
Chrome 28:事实并非如此。 - poitroae
Chrome 29.0.1547.57 m - 未修复 - nakib
我们 认为 这个错误是固定的,因为我们有一个解决方法,我们不再需要@balpha - Jeff Atwood