只有在我没有更改的情况下才替换文档标题

Replace document title only if not changed by me

我知道这是个奇怪的话题。

我想更改 document.title 只有页面(不是我的代码)已更改它。

所以我有一个观察者看标题:

var target = document.querySelector('head > title');

var observer = new window.WebKitMutationObserver(function(mutations) {
    mutations.forEach(function(mutation) {
        // console.log('new title:', mutation.target.textContent);

        // Here call my function to replace the title with mine
        // But don't call that function if the title has been changed by me
    });
});
observer.observe(target, { subtree: true, characterData: true, childList: true });

然后我可以看到每个新值。问题是,当标题是新标题时,我想用我的自定义值替换它。而且我不知道如何避免无限循环。

考虑这个过程:

  1. Twitter/GitHub/Gmail等动态网站正在更改标题“(1)新邮件”。
  2. 我的功能是用“[Gmail] (1) 新邮件”替换标题。但是我不想触发无限循环。
  3. Twitter/GitHub/Gmail等动态网站正在更改标题“(2)新邮件”。
  4. 我的功能是将标题替换为“[Gmail] (2) 新邮件”。但是我不想触发无限循环。

如果我理解你的问题,你的页面标题有两种状态:

  • 由页面更改
  • 由你改变

一种解决方案是存储该状态并在您的观察者中使用它。 例如,您可以使用全局变量:

var changedByMe = false;
var observer = new window.WebKitMutationObserver(function(mutations) {
    if (changedByMe) {
      changedByMe = false;
    } else {
      mutations.forEach(function(mutation) {
        // your code
        changedByMe = false;
      });
    }
});