2015-09-03 3 views
0

Я знаю, что это странный предмет.Заменить название документа, если оно не изменено мной

Я хочу изменить 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

Если я правильно понимаю вашу проблему наилучшим образом, ваш заголовок страницы имеет два состояния:

  • изменены страницы
  • изменен Вами

Раствор будет хранить это состояние и использовать его в своем наблюдателе. , для примера, вы можете использовать глобальную переменную:

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

Спасибо, я буду обновлять этот вопрос, как только я могу достичь своей цели. Продолжение следует! :) – Syl