Как заставить ie11 запросить новый favicon?
Я работаю над веб-сайтом, который меняет свой значок в зависимости от данных пользователя, вошедшего в систему. Контроллер обрабатывает этот запрос на сервере и отправляет соответствующий значок для сайта. До сих пор я избегал кэширования favicon большинством браузеров:
<link rel="shortcut icon" type="image/x-icon" href="resources/favicon.ico?v=${date.time}"/>
Однако favicon все еще кэшируется в ie11. Когда я включил отладку на Netbeans, контроллер не получил никаких запросов.
Что следует отметить:
- Первый значок при входе на сайт работает. Я просто не могу заменить его после входа в систему.
- Я набрал URL-адрес значка в адресной строке, и он вернул правильный значок.
Я искал вокруг, но я не могу найти решение этой проблемы.<
4 ответа
Использование JavaScript для изменения значка в IE11:
HTML
<link rel="icon" type="image/x-icon" href="resources/favicon.ico">
JS
// Chrome allows you to simply tweak the HREF of the LINK tag.
// Firefox appears to require that you remove it and readd it.
function setFavicon(url)
{
removeFavicon();
var link=document.createElement('link');
link.type='image/x-icon';
link.rel='icon';
link.href=url;
document.getElementsByTagName('head')[0].appendChild(link);
if (window.console) console.log("Set FavIcon URL to " + getFavicon().href);
}
function removeFavicon()
{
var links=document.getElementsByTagName('link');
var head=document.getElementsByTagName('head')[0];
for(var i=0; i<links.length; i++)
{
if(links[i].getAttribute('rel')==='icon'){
head.removeChild(links[i])
}
}
}
Демо: http://www.enhanceie.com/test/favicon/dynamic.htm
ПРИМЕЧАНИЕ: это работает в Chrome, Firefox, IE11+. Он не работает в IE10 или более ранних версиях, Opera 12.15 или Safari 6.0.5(mac). Объедините этот метод с вашим методом favicon.ico? V =xxxx для более ранних браузеров.
Вы уверены, что это не только локально кешируется? Я думаю, проблема в том, что IE11 не хочет искать новый значок и использует локально кэшированный.
Попробуйте заставить его получить значок. Смотрите ответ Алекса здесь: Как я могу заставить обновление фавикон
Следуя этим шагам, вы сможете получить новый значок избранного на своем устройстве в IE11.
Кроме того, вы можете полностью переименовать значок и использовать новое имя с тегом ссылки.<link rel="shortcut icon" href="/images/new-favicon-name.ico" />
Еще один полезный трюк в той же теме: как заставить обновление фавикон
Использование хеша файла в качестве версии гарантирует уникальные имена.
Чтобы изменить значок и убедиться, что новый значок будет отображаться вместо старого, простой и неаккуратный способ состоит в том, чтобы изменить имя значка, вам не нужно называть его favicon.ico, называть его как угодно. ico и поместите обычную строку кода в разделе заголовка:
<link rel="shortcut icon" href="interdit.ico">
и загрузите файл ico: everything.ico (измените все, что хотите).
Предупреждение: хотя этот ответ (на мой взгляд) хороший совет, он не работает с IE11
Добавление параметров URL к обычному пути favicon - это полезный метод для обновления favicon и принудительной перезагрузки браузерами. Тем не менее, браузеры, как известно, очень ленивы, когда дело доходит до загрузки favicon. Так что обновите свой значок, что, вероятно, выходит за рамки техники дополнительных параметров URL.
Я советую вам попробовать favicon.js. Эта библиотека JavaScript предназначена для создания динамических значков и позволяет вам делать довольно удивительные вещи.