仅在我未更改文档标题

时间:2015-09-03 15:03:28

标签: javascript domdocument

我知道这是一个奇怪的主题。

我只想在页面(不是我的代码)改变它的情况下更改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)新邮件”替换标题。但我不想触发无限循环。

1 个答案:

答案 0 :(得分:1)

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

  • 由页面更改
  • 由您改变

解决方案是存储该状态并在观察者中使用它。 对于istance,您可以使用全局变量:

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