Подтвердить что ты не робот

Как прослушивать изменения в элементе title?

В javascript существует ли способ прослушивания изменений в элементе title?

4b9b3361

Ответ 1

Через 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 имеет потрясающую поддержку браузера:

Ответ 2

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

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

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

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

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

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

var oldTitle = document.title;
window.setInterval(function()
{
    if (document.title !== oldTitle)
    {
        //title has changed - do something
    }
    oldTitle = document.title;
}, 100); //check every 100ms

Ответ 4

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

(function () {
    var lastTitle = undefined;
    function checkTitle() {
        if (lastTitle != document.title) {
            NotifyTitleChanged(document.title); // your implement
            lastTitle = document.title;
        }
        setTimeout(checkTitle, 100);
    };
    checkTitle();
})();