422 votes

Modification dynamique de la favicon d'un site web

J'ai une application Web qui est marquée en fonction de l'utilisateur qui est actuellement connecté. J'aimerais changer le favicon de la page pour qu'il soit le logo de la marque privée, mais je n'arrive pas à trouver de code ou d'exemple sur la façon de le faire. Quelqu'un a-t-il déjà réussi à le faire ?

J'imagine avoir une douzaine d'icônes dans un dossier, et la référence au fichier favicon.ico à utiliser est générée dynamiquement avec la page HTML. Qu'en pensez-vous ?

54 votes

Il existe un jeu d'arcade dans un favicon.

0 votes

Notez que la mise en œuvre de la favicon dynamique de Chrome est boguée et utilise trop de CPU. Voir code.google.com/p/chromium/issues/detail?id=121333

15 votes

Le lien pour le jeu d'arcade a changé. Ce site est le bon.

497voto

keparo Points 13747

Pourquoi pas ?

var link = document.querySelector("link[rel~='icon']");
if (!link) {
    link = document.createElement('link');
    link.rel = 'icon';
    document.getElementsByTagName('head')[0].appendChild(link);
}
link.href = 'https://stackoverflow.com/favicon.ico';

2 votes

Je pense que c'est proche de ce que je recherche, mais comment puis-je obtenir la HREF appropriée à partir de la base de données ? Je suppose que je devrai faire une recherche sur le serveur à partir de javascript, mais je ne veux pas que ce soit trop compliqué. Merci pour le conseil.

0 votes

Bien sûr, vous pouvez toujours les rechercher dans une base de données ou un système de fichiers. S'il n'y en a que quelques-uns, vous pouvez simplement coder en dur un tableau de chaînes de caractères.

37 votes

Puisque cela ne fonctionne pas dans IE de toute façon, vous pouvez enlever shortcut de la rel attribut. shortcut est une relation de lien non valide appartenant à l'IE !

100voto

Mathias Bynens Points 41065

Voici un code qui fonctionne dans Firefox, Opera et Chrome (contrairement à toutes les autres réponses postées ici). Voici une autre Démonstration d'un code qui fonctionne dans IE11 aussi. L'exemple suivant peut ne pas fonctionner dans Safari ou Internet Explorer.

/*!
 * Dynamically changing favicons with JavaScript
 * Works in all A-grade browsers except Safari and Internet Explorer
 * Demo: http://mathiasbynens.be/demo/dynamic-favicons
 */

// HTML5™, baby! http://mathiasbynens.be/notes/document-head
document.head = document.head || document.getElementsByTagName('head')[0];

function changeFavicon(src) {
 var link = document.createElement('link'),
     oldLink = document.getElementById('dynamic-favicon');
 link.id = 'dynamic-favicon';
 link.rel = 'shortcut icon';
 link.href = src;
 if (oldLink) {
  document.head.removeChild(oldLink);
 }
 document.head.appendChild(link);
}

Vous l'utiliserez alors comme suit :

var btn = document.getElementsByTagName('button')[0];
btn.onclick = function() {
 changeFavicon('http://www.google.com/favicon.ico');
};

Fourchette o voir une démo .

0 votes

En Bug de Chrome a été corrigé dans Chrome 6 (publié en septembre 10), de sorte que le hack de Chrome n'est plus vraiment nécessaire - en fait, je suggérerais fortement de ne pas l'utiliser puisqu'il casse le bouton de progression.

0 votes

Le bogue de Chrome a peut-être été corrigé, mais il est à nouveau cassé dans la version 14.0.835.187.

0 votes

En Démonstration ne fonctionne pas pour moi avec Chrome 21/WinXP.

63voto

Corey Trager Points 11334

Il existe un jeu d'arcade dans un favicon.

52voto

fserb Points 1885

Si vous avez le snippet HTML suivant :

<link id="favicon" rel="shortcut icon" type="image/png" href="favicon.png" />

Vous pouvez modifier la favicon à l'aide de Javascript en modifiant l'élément HREF de ce lien, par exemple (en supposant que vous utilisiez JQuery) :

$("#favicon").attr("href","favicon2.png");

Vous pouvez également créer un élément Canvas et définir le HREF en tant que ToDataURL() du canevas, à l'instar de l'élément Favicon Defender fait.

2 votes

Je pense qu'au moment où le JS s'exécute, le navigateur aura déjà vu le lien et essayé de le charger. favicon.png . Il se peut que cela doive être fait côté serveur.

1 votes

Si vous n'utilisez pas JQuery, vous pouvez modifier l'adresse de l'utilisateur. href l'attribut de #favicon en utilisant document.getElementById('favicon').setAttribute('href','favi‌​con2.png') Peut-être pouvez-vous l'ajouter à votre post @fserb ?

41voto

Theodore Points 1336

Version de jQuery :

$("link[rel='shortcut icon']").attr("href", "favicon.ico");

ou encore mieux :

$("link[rel*='icon']").attr("href", "favicon.ico");

Version Vanilla JS :

document.querySelector("link[rel='shortcut icon']").href = "favicon.ico";

document.querySelector("link[rel*='icon']").href = "favicon.ico";

0 votes

@pkExec Une combinaison de cette réponse et de la réponse de keparo ci-dessus (la réponse choisie) a permis de le faire fonctionner à la fois dans ff et chrome pour moi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X