как прослушать изменения в заголовке элемента? - PullRequest
20 голосов
/ 23 марта 2010

Есть ли в javascript метод прослушивания изменений в элементе заголовка?

Ответы [ 4 ]

41 голосов
/ 09 апреля 2015

5 лет спустя у нас наконец-то есть лучшее решение. Используйте MutationObserver !

Короче говоря:

new MutationObserver(function(mutations) {
    console.log(mutations[0].target.nodeValue);
}).observe(
    document.querySelector('title'),
    { subtree: true, characterData: true }
);

С комментариями:

// select the target node
var target = document.querySelector('title');

// create an observer instance
var observer = new MutationObserver(function(mutations) {
    // We need only first event and only new value of the title
    console.log(mutations[0].target.nodeValue);
});

// configuration of the observer:
var config = { subtree: true, characterData: true };

// pass in the target node, as well as the observer options
observer.observe(target, config);

Также Mutation Observer имеет потрясающую поддержку браузера :

17 голосов
/ 23 марта 2010

Вы можете сделать это с событиями в большинстве современных браузеров (заметными исключениями являются все версии Opera и Firefox 2.0 и более ранние версии). В IE вы можете использовать propertychange событие document, а в последних браузерах Mozilla и WebKit вы можете использовать общее событие DOMSubtreeModified. Для других браузеров вам придется вернуться к опросу document.title.

Обратите внимание, что я не смог проверить это во всех браузерах, поэтому вам следует тщательно проверить это перед использованием.

ОБНОВЛЕНИЕ 9 АПРЕЛЯ 2015

В наши дни обозреватели мутаций - это путь, который можно использовать в большинстве браузеров. См. Ответ Владимира Старкова для примера. Для старых браузеров, таких как IE <= 10 и более ранних версий Android, вы можете использовать некоторые из перечисленных ниже в качестве запасных. </p>

function titleModified() {
    window.alert("Title modifed");
}

window.onload = function() {
    var titleEl = document.getElementsByTagName("title")[0];
    var docEl = document.documentElement;

    if (docEl && docEl.addEventListener) {
        docEl.addEventListener("DOMSubtreeModified", function(evt) {
            var t = evt.target;
            if (t === titleEl || (t.parentNode && t.parentNode === titleEl)) {
                titleModified();
            }
        }, false);
    } else {
        document.onpropertychange = function() {
            if (window.event.propertyName == "title") {
                titleModified();
            }
        };
    }
};
3 голосов
/ 23 марта 2010

Нет встроенного события. Тем не менее, вы можете использовать setInterval для этого:

var oldTitle = document.title;
window.setInterval(function()
{
    if (document.title !== oldTitle)
    {
        //title has changed - do something
    }
    oldTitle = document.title;
}, 100); //check every 100ms
0 голосов
/ 27 декабря 2014

Это мой способ, при закрытии и проверке при запуске

(function () {
    var lastTitle = undefined;
    function checkTitle() {
        if (lastTitle != document.title) {
            NotifyTitleChanged(document.title); // your implement
            lastTitle = document.title;
        }
        setTimeout(checkTitle, 100);
    };
    checkTitle();
})();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...