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

Создание document.title неприкосновенно для Javascript

Можно ли изменить document.title (<head><title> .. </title></head>) для Javascript?

Моя проблема в том, что в моем проекте есть несколько javascripts, которые меняют document.title каждые 1 секунду, и я хочу, чтобы заголовок оставался прежним. К сожалению, я не могу изменить или удалить эти JS файлы. Я попытался подумать об обходном пути, что-то вроде этого:

function checkTitle() {
if(document.title != oldTitle)
document.title = oldTitle;
}
setInterval(checkTitle(), 100);

Кажется, хорошая идея, НО, к сожалению, у меня есть счетчик, который отображает таймер на моем сайте. Весь мой код выглядит следующим образом:

var ticks = 0;

function update() {
    if(ticks % 1000 == 0) {
    ...update timer and some other stuff...
    }
    ticks+=100;
    if(document.title != oldTitle)
    document.title = oldTitle;
}
setInterval(update, 100);

Такой код после + 100 секунд начинает замедляться, и мой таймер определенно не обновляется каждые 1 секунду.

Итак, вопрос: возможно ли сделать элемент html (..) невозможным для javascript, если нет, есть ли какое-нибудь обходное решение для моей проблемы?

Спасибо заранее.

4b9b3361

Ответ 1

Вероятно, это связано с некоторыми побочными эффектами, но я не уверен, что именно, но вы можете переопределить свойство title и сделать его недоступным для записи, что было бы лучше, чем запечатывание или замораживание всего документа, поскольку это влияет только на title

Object.defineProperty(document, 'title', {
  enumerable: false,
  configurable: false,
  writable: false,
  value: document.title
});

FIDDLE

Это должно работать во всех браузерах от IE9 и выше, и, возможно, в IE8, которые я не тестировал, но я думаю, что только узлы DOM могут быть изменены в IE8 и не уверены, что document считает?

Ответ 2

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

$(document).ready(function() {
    $('title').bind('DOMSubtreeModified propertychange', function() {
        var title = $('title');
        if(title.text() != 'old title')
        {
            alert('title changed');
        }
    });

    $('a').bind('click', function() {
        $('title').text('new title');
    });
});