Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Динамический favicon (https://javascript.ru/forum/misc/81933-dinamicheskijj-favicon.html)

Ubivectel 16.02.2021 22:16

Динамический favicon
 
Здравствуйте товарищи!
Чат умеет выводить во вкладку браузера (в title) уведомления о новых сообщениях. Хочу попробовать одновременно с этим менять favicon. Нашел вот такой скрипт:

let iconNew = 'https://noviy-kovcheg.ru/favicon.png'; 
    function changeFavicon() {
    document.getElementById('favicon').href = iconNew; 

    function newUpdate() { 
     update = setInterval(changeFavicon, 3000);
}

var docBody  = document.getElementsByTagName('body')[0];
docBody.onload = newUpdate;


А вот фрагмент кода который как я понимаю меняет title:

kide.avisar = {
	mensajes_nuevos: 0,
	privados_nuevos: 0,
	avisar: false,
	original_title: "",

	onFocusGained: function () {
		//chrome bug
		kide.avisar.avisar = false;
		setTimeout(function () {
			document.title = kide.avisar.original_title;
		}, 100);
	},
	onFocusLost: function () {
		kide.avisar.avisar = true;
		kide.avisar.mensajes_nuevos = 0;
		kide.avisar.privados_nuevos = 0;
	},
	handleVisibility: function () {
		if (typeof window.onfocus == "function") {
			var focus = window.onfocus;
			window.onfocus = function () {
				kide.avisar.onFocusGained();
				(focus)();
			};
		}
		else {
			window.onfocus = kide.avisar.onFocusGained;
		}
		if (typeof window.onblur == "function") {
			var blur = window.onblur;
			window.onblur = function () {
				kide.avisar.onFocusLost();
				(blur)();
			};
		}
		else {
			window.onblur = kide.avisar.onFocusLost;
		}

		kide.avisar.original_title = document.title;
		kide.events.add('onPrivadosReload', kide.avisar.onPrivadosReload);
		kide.events.add('onAjaxReload', kide.avisar.onAjaxReload);
	},
	onPrivadosReload: function (xml) {
		if (kide.avisar.avisar) {
			var nuevos = xml.getElementsByTagName('mensaje').length + xml.getElementsByTagName('mensaje_offline').length;
			kide.avisar.privados_nuevos += nuevos;
			kide.avisar.changeTitle();
		}
	},
	onAjaxReload: function (xml) {
		if (kide.avisar.avisar) {
			kide.avisar.mensajes_nuevos += xml.getElementsByTagName('mensaje').length;
			kide.avisar.changeTitle();
		}
	},
	changeTitle: function () {
		if (kide.avisar.privados_nuevos > 0 || kide.avisar.mensajes_nuevos > 0) {
			var msg = kide.msg.avisar;
			msg = msg.replace("%p", kide.avisar.privados_nuevos);
			msg = msg.replace("%m", kide.avisar.mensajes_nuevos);
			document.title = msg;
		}
	}
};
kide.onLoad(function () {
	kide.avisar.handleVisibility();
}, function () { });


Куда только не вставлял код, или ломает чат или не работает :(

рони 16.02.2021 22:42

Ubivectel,
строка 63 добавить

document.querySelector("link[rel~='icon']").href = 'https://noviy-kovcheg.ru/favicon.png';

Ubivectel 16.02.2021 23:05

Работает, но остается когда переходишь на эту вкладку браузера

Ubivectel 16.02.2021 23:53

Как-то сделал, вставил после строки:

document.title = kide.avisar.original_title;


строку:

document.querySelector("link[rel~='icon']").href = 'исходный фавикон';


может не лучший вариант, но работает. рони спасибо )


Часовой пояс GMT +3, время: 19:40.