Создание 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, если нет, есть ли какое-нибудь обходное решение для моей проблемы?
Спасибо заранее.
Ответы
Ответ 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');
});
});