faviconを動的に変更する(html5-canvas)
2014年2月5日
たまに見かける新着があった時にfaviconに1とか2とかでるやつを実装する時のメモ。
更新通知以外の使い道はパッと思い浮かびませんが、他にも何か使える場面があるかも。。
まずhtml側から。
headにid=”favicon”なlinkタグを入れておきます。
<!DOCTYPE html> <html> <head> <link type="image/x-icon" id="favicon" rel="icon" href="/favicon.ico"> </head> <body> <!-- // コンテンツ... --> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> <script src="/fav.js"></script> </body> </html>
で、読み込まれるfav.jsはこんな感じ。
$(function(){ // 何かの更新イベント changeFavicon('+5'); // faviconの上に+5を表示 }); function changeFavicon ( text ) { // 16x16のcanvasを用意 var canvas = document.createElement("canvas"); canvas.height = 16; canvas.width = 16; // favicon.icoの読み込み var img = new Image(); img.onload = function() { var c = canvas.getContext('2d'); // 現在のfaviconをcanvasに貼り付け(画像,x,y) c.drawImage(img,0,0); // font指定(太さ,サイズ,font) c.font ="900 16px serif"; // 色指定 c.fillStyle = "#FF0000"; // 表示文字,表示位置(x),表示位置(y) c.fillText( text, 0, 16); // 生成された新しいfaviconを取得 var f = canvas.toDataURL('image/png'); // 現在のfaviconを削除 $('#favicon').remove(); // headに新しいfaviconを入れる var newFav = '<link type="image/x-icon" id="favicon" rel="icon" href="'+ f +'">'; $('head').append( newFav ); } // 元のfavicon(下地) img.src = '/favicon.ico'; }
更新の取得は、AjaxとかWebSocketとかですかね。
上のjsは更新のイベントを入れていないので、このまま読み込めばいきなりfaviconの上に「+5」と表示されるはずです(最近のブラウザであれば・・)