346
 

Управление иконками favicon из JavaScript

Иногда появляется необходимость динамически изменять иконку сайта - favicon, например, в чатах, при получении нового сообщения, при завершении продолжительной операции и др.

Иконка подключается в документ при помощи следующего тэга:

<link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />

Изменить иконку сайта можно путем удаления существующего тэга, указывающего на favicon и добавления нового (это действительно только для Firefox и Opera). Было бы неплохо, если бы иконку можно было изменять путём простой подмены аттрибута href, однако браузеры не реагируют на изменения аттрибутов тэга link. Ниже приведен пример функции, которая устанавливает иконку:

function changeIcon(){
	var head = document.getElementsByTagName("head")[0];

	// удаление старой иконки
	var links = head.getElementsByTagName("link");
	for (var i = 0; i < links.length; i++) {
		var lnk = links[i];
		if (lnk.rel=="shortcut icon") {
			head.removeChild(lnk);
			return;
		}
	}

	// создание и добавление новой иконки
	var link = document.createElement("link");
	link.setAttribute("href","myicon.ico");
	link.setAttribute("type","image/x-icon");
	link.setAttribute("rel","shortcut icon");
	head.appendChild(link);
}

Проверить этот скрипт можно нажав кнопку “Изменить иконку” - вместо логотипа сайта в адресной строке появится иконка “часы” (FF, Opera):


Хочу также обратить ваше внимание на библиотеку favicon.js, которая способна не только изменять иконки, но также делать простые анимации, изменять заголовок страницы, делать бегущую строку в заголовке. Примеры использования этой библиотеки:

// установка иконки, заголовка
favicon.change("/icon/active.ico", "new title");

// установка иконки
favicon.change("/icon/active.ico"); // leaves title alone. Cancels any animation.

// установка заголовка, иконка без изменения
favicon.change(null, "new title"); // leaves icon alone. Cancels any scrolling.

// Анимация иконок. Если последний элемент массива иконок пустая строка то
// между циклами будет вставляться пустая иконка
favicon.animate(["icon1.ico", "icon2.ico", ...]);

// анимация с задержкой в 500мс
favicon.animate(["icon1.ico", "icon2.ico", ...], {delay: 500} );

// бегущая строка
favicon.scrollTitle("new title");

// бегущая строка с задержкой 200мс между циклами, между каждой
// строкой будет вставляться "------", по умолчанию "      "
favicon.scrollTitle("new title", { delay: 200, gap: "------"} )

// отмена бегущей строки и анимации
favicon.unscroll();
favicon.unanimate();

Узнать больше о библиотеке можно здесь (англ). Скачать скрипт. Демо.

Добавить в закладки:

Оставить комментарий

JSToolbox создан на основе WordPress