Releasing Growler earlier diminishes this one’s value a little, but I don’t want these two to step on each others’ toes. While the first version was pretty amazing, this is version that really makes a difference, mainly for two reasons:⌘
- Apple’s and Safari’s dickheadedness about plug-ins and how they work.
- Web developers’ reluctance to implement something new. It’s not their fault for the most part though (I am one, I know). The smaller apps are easier to patch for added functionality. The bigger ones need numbers to justify changes.
So, taking the “it’s easier to change myself than expect the world to change”, here’s the next version of Growler — now with SIMBL love.⌘
The version 1 roadblock
Like I pointed out, the biggest drawback to the previous version was the fact that I was unable to define a global object for Javacript to use. That basically meant that existing applications couldn’t use Growler without changes to their code base, and embedding the plug-in. That’s a lot of work for a 10% market share browser. Almost all these apps already support Fluid, so their incentive to support a Safari plug-in was understandably … non-existent.⌘
After finding out that what I was trying to do could not be done the supported way, I (hesitantly at first) stepped into the ugly world of Input Manager hacks. Now, Input Manager hacks aren’t really a bad thing on their own. Being unsupported by Apple, they’re risky, sure. But if you think about it, Safari doesn’t see so many updates anyway. And even then, the only thing that can break is the hook (depending on how the plug-in is implemented). I decided it was worth the trouble if it meant Safari would get this awesomeness without others taking too much trouble.⌘
I chose SIMBL because it’s been around a while now, so it knows how to get the job done. Maybe when I become proficient enough in the weeks/months to come, I’ll remove that dependency and Growler can stand on its own feet. You, the user, won’t see anything though. I’ve packaged everything into a nice little installer that does the work for you. This release is really all about convenience. Things haven’t gone as easily as I had hoped.⌘
What’s new
The premise of the plug-in should be clear enough by now. If it isn’t, I suggest a quick skim over my earlier release. With this version, you get all that, and none of the headaches. You don’t have to embed anything!⌘
There are now three global objects for your application to call. That’s to make sure your code works across the SSB of your choice and Safari. So you get fluid for Fluid, platform for Prism and growler because I was having way too much fun with this. Each one comes with three ways to post notifications:⌘
showGrowlNotification(object);
showNotification(title, description, icon);
growler(object);
You can mix and match the window object and function. That’s 9 ways to post notifications. The object is up to Growl’s specifications. Growler currently supports the title, description1, icon and sticky keys — with support for callback and identifier coming very soon. You can specify all the keys you want to — unsupported ones will simply be ignored. Pretty much the same as the previous release from here.⌘
So now, you can install the plug-in, head on over to apps like Meebo, and you’ll start getting notifications — just like that (conditions apply)! This also opens up the many Fluid notification userscripts2 to Safari+GreaseKit users. The possibilities are really endless, and probably brings us one step closer to making SSBs irrelevant. Do we really need multiple instances of a browser running? I don’t think so.⌘
Download
You will want to remove the earlier plug-in (from ~/Library/Internet Plug-ins) after installing this. Not that they will interfere with each other, but just to keep Safari running clean.⌘
Update (13/08): Updated Growler to work with latest Safari (4.0.3). Update: Looks like the installer isn’t working as awesomely as I had hoped. Follow these steps to get Growler installed:⌘
- Download the
dmgthat contains SIMBL andGrowler.bundle. - Install SIMBL by double clicking its package.
- Once SIMBL has finished installing, place
Growler.bundlein/Library/Application Support/SIMBL/Plugins. - Restart Safari.
-
These two are required fields. ‘description’ is not really required, except that if you don’t, the notification has a botched up output because of the way objects are handled in Objective-C. Fluid suffers from the same thing, and changing the key would solve this, but I didn’t want to break compatibility. ↩
-
In my testing, quite a few of the user scripts that said they supported Fluid actually didn’t. I’ve written Growler exactly to Fluid’s specifications, so if something doesn’t work, it’ll be a good thing to check it with Fluid first. If it doesn’t work there either, you know where the problem is. ↩

