Tinycon is a javascript library that allows easy manipulation of the favicon to include nice looking alert bubbles. This means that users can pin your site and still see when their attention is needed!
It's been done before, but in my opinion not in a way aesthetically pleasing enough for production use. This library also falls back to the standard number in page title approach for browsers that do no support canvas / dynamic favicons.
Ok, i've updated this so the only UA sniffing is to discount Safari as it appears to have all the required support but doesn't allow dynamic favicons. I'm quite sure there isn't a way to feature detect this.
While I appreciate a good piece of code and the need to reinvent a wheel, I wouldn't call your implementation "aesthetically pleasing" either. IMO your fallback option is the solution, simply appending "(5)" to the page title when there are 5 pending alerts works the best.
There are certain situations in which only the favicon is displayed - for example, when tabs are "pinned". In these cases, appending text to the page title would not be visible, which is why it's beneficial to have a dynamic favicon.
And my pinned tabs are wider than regular tabs. So favicon it is. Gmail has this function and it is great. Although I do agree that having both is probably the way to go. Change favicon (don't blink!) and prepend a number/message to the title.
Also, in many cases the title of a page is longer than the area it's supposed to fit in - in which case, appending the alert to the page title results in it not being visible.
Appending to the end of the page title doesn't work, because the end of the title gets chopped off when it doesn't fit in the tab title or window title.
Prepending to the start of the page title does work though.
This is one of the reasons I use Twitter web client - it sits in a tab (on the @mentions screen) and I only pay attention to it when I see a "(1)" or whatever. It's unobtrusive notifications.
Hey, the number in title approach definitely has its place! (There's a reason why Facebook, Google use that approach right?)
But if you have an audience skewed towards modern browsers and want to do something a little different this works well and definitely draws the eyes attention.
Changing the title bar is ineffective; you either make the title blink between two states which is a blaring annoyance and terribly distracting (GChat), or you just add a modest little (1) that is hard to see (Facebook). I think the favicon is much better suited for this function; it conforms to what people are used to with mobile phone UI.
However, the problem with this library is it has to follow the limitations of favicons' dimensions. I think there should be an open standard for having alert badges like iPhone and Android phones put on top of home screen icons. The browser distributer could design theirs to match the UI so people could recognize them, and they could be allowed to extend just 2 or 3 pixels past the normal favicon boundaries to grab attention without being annoying or invisible.
You can tell when people want something when they're settling for several make-shift approaches at it within limitations.
Chrome has a desktop notification system similar to Growl. Not sure if Firefox and others implement it. I much prefer it over the titlebar modification which I just find plain irritating.
I used to have that activated for GChat but got tired of it. I think it's more annoying than the title bar, but at least you can turn it off.
Alerts should be there when I want to look for them - they shouldn't pull me out of what I'm doing. If they have to pop up on the screen for me to notice them it probably means I'm paying attention to something else.
What was arrogant about the comment? He merely stated that he doesn't find the solution to be aesthetically pleasing. Are opinions contrary to those of the majority now to be considered arrogant?
It wasn't supposed to. Reinventing a wheel is a good thing, that's what a majority of people on HN do on daily basis. This is what moves things forward.
Excellent stuff. I find the best javascript micro libs are built with one specific purpose in mind, like at work or on a startup, then extracted out and open-sourced :)
I'd suggest adding a config option for how to handle certain digits or multiples - personally I would prefer to have 1..20 and then 20+, 30+, etc. because they're easier to grok at a glance. I guess that could be wrapped into it pretty easily for any given use case though.
It tries to find a managebale number of updates in a relevant and meaningful time frame "There have been 18 updates in the last 20 minutes" - it works on this page:
I found the numbers too small to be readable. I'd expect that two states (notify on, notify off) would be enough to serve the same purpose for most users, perhaps with the number in the title too.
This is awesome. I was hoping to get something like this for 'save to home screen'. Any idea if this will work with a large favicon running on a mobile device?
JS for what is normally an image seems pretty far out there, wouldn't surprise me if not many browsers supported yet. And JS itself often needs to be tested and tweaked on many browsers before it works on all.
Personally, I would have just implemented in PHP. I already have a pretty trivial PHP script I use to overlay a site logo on images that are direct linked instead of accessed on one of my image serving sites. Although browsers might cache the favicon excessively even with the proper caching headers, would have to test. But as far as browsers would be concerned it would just be another image (even if it is generated dynamically by PHP and image magick the first time and only copied to output from a file cache after).
This was the next item on my list to hack on this week. This is awesome, I'd love to see more apps use these, I love pinned tabs in Chrome but I lose info.
It's been done before, but in my opinion not in a way aesthetically pleasing enough for production use. This library also falls back to the standard number in page title approach for browsers that do no support canvas / dynamic favicons.
Thoughts welcome.