Unfortunately, running Safari means living in the minority and running into those occasional issues. People don't test their sites with Safari. Safari is less forgiving, so crappy html/javascript/css that works in IE or Firefox sometimes doesn't work in Safari.
And finally, we miss out on the single biggest thing Firefox has going for it: the wealth of community-driven addons and extensions. While there are a few I miss, the basics are there, and they're really all you need. Here are a few:
- Safari AdBlock is a must have. Stop those banner ads, and annoying Vibrant mouseover popups.
- GreaseKit: GreaseMonkey for Safari. What's GreaseMonkey? It's a scripting engine that allows you to tweak web pages your browser, using Javascript.
- Folders4Gmail: hierarchical tags for Gmail (requires GreaseMonkey/Kit).
So in its place, I present a slimmer, cleaner "Gmail Auto Self BCC" GreaseMonkey/Kit script (that works in Safari, of course) that simply populates your From address into the bcc field whenever you hit Send in GMail. The source is below, or you can download it here. Compare this source code to the original, from which I borrowed some ideas.
On a related note, I recently gave Firefox another try for a couple weeks. What finally got me to switch back to Safari/Webkit was Fluid. Fluid allows you to create standalone apps out of any web page. Now I can have standalone, dockable apps for Gmail (work and home), Calendar, Reader, and not have any of my testing and development work in Safari or Firefox hang or crash or otherwise mess them up. It's awesome.
// ==UserScript==
// @name Gmail Auto Self BCC
// @namespace http://www.kehlet.cx/
// @description Automatically copy your From address into the bcc field (done upon
hitting Send) so all mail you originate shows up in your Inbox. For GMail v2.
// @include http*://mail.google.com/*
// ==/UserScript==
window.addEventListener("load", loader, false);
function loader() {
var api = typeof unsafeWindow != "undefined" && unsafeWindow.gmonkey ||
(frames.js ? frames.js.gmonkey : null);
if (api) api.load("1.0", init);
}
function init(gmail) {
function findElement(root, name) {
var elts = root.getElementsByName(name);
return elts ? elts[0] : null;
}
function handleClicks(event) {
var elt = event.target;
if (elt.innerText == 'Send') {
var fromElt = findElement(elt.ownerDocument, 'from');
if (fromElt) {
var bccElt = findElement(elt.ownerDocument, 'bcc');
if (bccElt) {
var re = new RegExp(fromElt.value);
if (!bccElt.value.match(re)) {
bccElt.value = bccElt.value ? bccElt.value + ', ' + fromElt.value :
fromElt.value;
}
}
}
}
}
function viewChanged() {
var view = gmail.getActiveViewType();
if (view == 'co' || view == 'cv') {
var root = gmail.getNavPaneElement().ownerDocument;
root.addEventListener('click', handleClicks, true);
}
}
gmail.registerViewChangeCallback(viewChanged);
}