Favicon Picker3を使わず動的にブックマークのfaviconを変える
RADIO-iのホームページ はfaviconが設定されてないのでブックマークしても白紙のfaviconが表示されます。これでは寂しいのでfaviconを付けましょう!
いろいろ調べたところuserChrome.cssでちょちょいとは出来ないようです。対象はchrome://browser/content/bookmarks/bookmarksPanel.xulです。
favicon適用手順
- このページ(http://www.radio-i.co.jp/)をブックマークに入れてください。
- アドレスバーにchrome://browser/content/browser.xulをコピペしてエンター。これはchrome権限を得るためです。
- Firebugのコンソールに以下を入力して実行。サイドバーのブックマークを開いておくと変化がわかりやすいです。
var ioservice = Components.classes["@mozilla.org/network/io-service;1"] .getService(Components.interfaces.nsIIOService); var pageURI = ioservice.newURI("http://www.radio-i.co.jp/", null, null); var faviconURI = ioservice.newURI("http://cherenkov.hp.infoseek.co.jp/tmp/radioi.png", null, null); var faviconService = Components.classes["@mozilla.org/browser/favicon-service;1"] .getService(Components.interfaces.nsIFaviconService); faviconService.setAndLoadFaviconForPage(pageURI, faviconURI, true);
数秒経つとfaviconが反映されます。このサンプルでは、「ブックマークのURLが"http://www.radio-i.co.jp/"のfaviconを"http://cherenkov.hp.infoseek.co.jp/tmp/radioi.png"にする」です。faviconURIの中にdataスキームを入れてもいけます。
インポート用のHTMLを作らなくてもいいのでオススメです。
この操作によってplaces.sqliteのmoz_placesテーブルの当該url(pageURI)のfavicon_id(moz_faviconsテーブルに対応している)が書き換えられたことを確認しました。
元に戻す
var ioservice = Components.classes["@mozilla.org/network/io-service;1"] .getService(Components.interfaces.nsIIOService); var pageURI = ioservice.newURI("http://www.radio-i.co.jp/", null, null); var faviconURI = ioservice.newURI("chrome://mozapps/skin/places/defaultFavicon.png", null, null); var faviconService = Components.classes["@mozilla.org/browser/favicon-service;1"] .getService(Components.interfaces.nsIFaviconService); faviconService.setAndLoadFaviconForPage(pageURI, faviconURI, true);
これでブランクなアイコンに戻ります。元からfaviconが設定されているページなら次にアクセスしたときにそれが適用されます。
課題
参考
*1:RADIO-愛・・。