Nella nostra applicazione abbiamo un meccanismo di sessione personalizzato che consente all'utente di avere sessioni diverse (ad esempio credenziali diverse) in ogni scheda del browser, anche se gli URL sono gli stessi. Questo meccanismo funziona alla grande in tutti i principali browser incluso IE (v11).Favicon differente in ogni scheda del browser in IE
Il problema
Vogliamo fornire ogni scheda del browser con differenti favicon (con colore differente) per indicare scheda che appartiene a quale sessione. Per fare questo, abbiamo creato diversi URL favicon seconda sessione utilizzando
<link rel='icon' href='url_to_favicon_session_id' type='image/ico'/>
E le grandi opere in Firefox e Chrome, tuttavia IE sembra condividere favicon tra tutte le schede che puntano allo stesso URL (l'icona è la stessa in ogni scheda , l'ordine di caricamento determina la favicon visibile in ogni scheda).
La domanda
Possiamo forzare IE in qualche modo di non condividere favicon attraverso le schede del browser con gli stessi URL?
Nota, la modifica dell'URL non è un'opzione qui.
Minimal Esempio di lavoro
seguito frammento di codice completo per riprodurre il problema (metterlo su un server web per l'esecuzione in IE con il supporto HTML5, aprire il file in molte schede dello stesso browser).
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<script type="text/javascript">
var icons = [
"http://google.com/images/google_favicon_128.png",
"https://assets-cdn.github.com/favicon.ico",
"https://www.microsoft.com/favicon.ico?v2",
"https://s.yimg.com/rz/l/favicon.ico",
"http://www.stackoverflow.com/favicon.ico",
];
var idx = localStorage["favicon"];
if (idx === undefined) {
idx = 0;
} else {
idx = parseInt(idx);
}
localStorage["favicon"] = (idx + 1) % icons.length;
var link = document.createElement('link');
link.type = 'image/x-icon';
link.rel = 'icon';
link.href = icons[idx];
document.getElementsByTagName('head')[0].appendChild(link);
</script>
</head>
<body>
Open this page in multiple tabs. Favicon should be different in each tab.
</body>
</html>
Nell'esempio, il tag favicon viene generato tramite JavaScript. Questo è anche il caso nella vera applicazione? Se è così, posso immaginare che IE carichi favicon dalla sua cache (basata sull'URL) e non lo ricarichi quando lo JavaScript fa kick. In tal caso, potresti provare a renderlo lato server nel contenuto della pagina iniziale. – GolezTrol
No, nella favicon dell'applicazione reale è incorporato nel codice HTML.Tuttavia non importa per IE * come * la favicon è inclusa nella pagina, ma qual è l'URL * della * pagina. Inoltre non si tratta di un problema di cache, dal momento che (1) se si carica il codice che ho fornito in due URL diversi funziona come previsto, (2) anche se HTML è memorizzato nella cache, lo script caricherà diversi URL favicon, quindi la memorizzazione nella cache di file favicon non è rilevante qui. – tomash
Una soluzione potrebbe essere quella di aggiungere un parametro unico fittizio all'URL della pagina per ogni sessione (ad es. Http://yoursite.com/page?id=). Questo costringerà IE11 a caricare una favicon diversa su ogni scheda. –
dbcb