2011-08-06 31 views
39

JavaScriptとHTMLのみを使用して、現在のページのファビコンを背景として使用し、前景の乱数を動的に生成することはできますか?動的に生成されたfavicon

例えば、現在のファビコンはこのようになります言うことができます:

====================== 
====XXXXXXXXXXXXXX==== 
====X================= 
====X================= 
====X=====XXXXXXXX==== 
====X============X==== 
====X============X==== 
====XXXXXXXXXXXXXX==== 
====================== 

可能であれば、どのように私はそれが唯一のJavaScriptとHTMLを使ってこれに似た何かを探すようになるだろう:

====================== 
====XXXXXXXXXXXXXX==== 
====X================= 
====X================= 
====X=====XXXXXXXX==== 
====X=========--111--= 
====X=========--1-1--= 
====XXXXXXXXXX----1--= 
==============--1111-= 

マップ:
=:白い背景
x:オリジナルファビコンの画像
-:赤は数
1で画像を生成:ホワイトテキストを

アイデア:

  • キャンバス?
  • データUri's?
+0

うわー、1の者は、実際には赤です...私は旺旺けれども反対です。 '1'は白く、' - 'は赤色になります – Shaz

+0

あなたのブラウザ上でユーザーの現在のファビコンをこの新しいイメージで変更したいのですか、それともどこかの画面に表示しますか? – mellamokb

+0

@mellamokb数字を含めるように変更してください。 – Shaz

答えて

51

EDIT:ブラウザに

javascript: var canvas = document.createElement('canvas');canvas.width = 16;canvas.height = 16;var ctx = canvas.getContext('2d');var img = new Image();img.src = '/favicon.ico';img.onload = function() {ctx.drawImage(img, 0, 0);ctx.fillStyle = "#F00";ctx.fillRect(10, 7, 6, 8);ctx.fillStyle = '#FFFFFF';ctx.font = 'bold 10px sans-serif';ctx.fillText('2', 10, 14);var link = document.createElement('link');link.type = 'image/x-icon';link.rel = 'shortcut icon';link.href = canvas.toDataURL("image/x-icon");document.getElementsByTagName('head')[0].appendChild(link);} 

とアクションでそれを参照してください。それはあなたが実際にChromeを実行し、これを貼り付けることができ

var canvas = document.createElement('canvas'); 
    canvas.width = 16;canvas.height = 16; 
    var ctx = canvas.getContext('2d'); 
    var img = new Image(); 
    img.src = '/favicon.ico'; 
    img.onload = function() { 
     ctx.drawImage(img, 0, 0); 
     ctx.fillStyle = "#F00"; 
     ctx.fillRect(10, 7, 6, 8); 
     ctx.fillStyle = '#FFFFFF'; 
     ctx.font = 'bold 10px sans-serif'; 
     ctx.fillText('2', 10, 14); 

     var link = document.createElement('link'); 
     link.type = 'image/x-icon'; 
     link.rel = 'shortcut icon'; 
     link.href = canvas.toDataURL("image/x-icon"); 
     document.getElementsByTagName('head')[0].appendChild(link); 
    } 

と協力しました。

enter image description here

+3

いくつかの警告:ここで説明されているように(http://stackoverflow.com/questions/260857/changing-website-favicon-dynamically)、これはすべてのブラウザで機能するわけではありません。これは、ページがある別のドメインからファビコンが読み込まれた場合にも失敗します - [この質問]を参照してください(http://stackoverflow.com/questions/2390232/why-does-canvas-todataurl-throw-a-security-例外) –

+1

@Yi:Atm、これはGoogle Chromeと特定のページでのみ使用されます。あなたが今まで私に提供してくれたリンクを参考にしてくれただけではありません。ありがとう! – Shaz

+0

だから、あなたが本当にあなたのwebappにこれをさせたい場合には、これにアプローチするのが合理的な方法です。それは、サーバー側にfaviconレンダラーを実装することです。たとえそれがクロムのみであっても、非常に涼しいです。 –

4

ブラウザですべてを行うことについてはわかりませんが、URLにパラメータを受け入れ、作成されたfaviconを返すサーバーエンドポイントを持つことは簡単です。その後、Javascriptはfavicon URLを変更して、必要なイメージを取得できます。

+0

悲しいことに、このようなものを無料で提供するパブリックサーバーがない限り、サーバーは現時点ではオプションではありません。 : – Shaz

+2

GoogleのApp Engineは、このサービスを提供することができる無料の公開サーバです。 –

+0

最後の手段としてサーバーを使用して、ブラウザ自体で処理したいと思っています。) – Shaz

14

faviconを動的に変更する方法については、this questionをご覧ください。またhere is a siteは、JavaScript、キャンバス、およびデータURIを使用してfaviconでゲームをプレイすると主張しています。これはIEを除くすべての最新のブラウザで機能するはずです。それが要件を満たしているかどうかは分かりませんが、リバースエンジニアリングの仕組みを試すことができます。

キャンバス要素を使用してファビコンデータを読み込んでイメージデータを取得し、新しいアイコンに変更して合成する方法について説明したSO answerです。

0

favicon.jsまさにこれを行います。このライブラリは、他の機能の中で、ファビコンの右下にカウンターを表示することができます。

enter image description here

関連する問題