For a long time I used to try uzbl once in a while, but I always went back to other browsers due to two hurdles. Namely I couldn't make adblocking and flashblocking work. Recently though, with some help, I managed to get both functionalities and I actually started using uzbl most of the time.
To make flashblock work I copied flashblock.js from http://www.uzbl.org/wiki/flashblock and placed it in /usr/share/uzb/examples/data/scripts/. To make it work you must add
@on_event LOAD_COMMIT script @scripts_dir/flashblock.js
to your .config/uzbl/config file somewhere after scripts_dir variable is defined. I placed it in "Dynamic event handlers" section. Once it all works you should see a white box with a word "flashblocked!!!" in the middle of it in place of a flash content on a page. You click on it anywhere to load the plugin, though there is no "click-me" cursor displayed, and on Youtube the box doesn't cover the whole area of a flash-player, but it's fine by me anyway.
Adblocking was a bit more problematic. After trying several solutions I decided to use a non-caching proxy. Caching proxies slow down my system visibly, and privoxy (often advised) is even slower, as it loads the whole page before displaying anything, which makes browsing the net extremely painful for a speed freak like me. ;-)
Anyway, I used squid (emerge squid), which I configured to be a non-caching ad-filter, using an automatically updated filter list. This way you don't even load advertisement into your browser. They are blocked before they can do any damage to your system, which is different from most adblocking plugins, which simply do not display them to the user. The code is there, though, and potentially it could harm your system if it exploits a security hole in your browser.
To make squid work as described, we need to download a file with adfilters. I found a script which downloads a filter file from a web and I placed it in my /etc/cron.daily/ directory. I used a guide at http://wiki.linuxmce.org/index.php/Squid_as_ad_blocker. It boils down to copy-pasting a getadblock.sh file, placing it into /etc/cron.daily/ and making it executable. Also you probably should create a log file in /var.
mkdir /var/log/pluto && touch /var/log/pluto/ad-blocker
If you run this file, it will download a set of filters from http://pgl.yoyo.org/adservers/ and save it into /etc/squid/squid.adservers.regex, then log it and restart squid.
To make squid use this file you must add an acl rule somewhere before
http_access allow localhost
line. My modifications to default config look like that:
# nasze adbloki acl ads dstdom_regex -i "/etc/squid/squid.adservers.regex" http_access deny ads cache deny all shutdown_lifetime 1 seconds http_access allow localhost # /nasze adbloki
It tells squid to check your requests against filter file and deny them, it tells it to not cache anything and shutdown quickly. If it all works, you have an ad-blocking proxy on your machine on port 3128.
To make uzbl use it, we must add
set proxy_url = http://127.0.0.1:3128
into our .config/uzbl/config file. If you want chrome use it, you may use all_proxy environment variable. Just add
into your .bashrc file and chrome will also be able to use your system-wide adblocking service.
If you happen to like this solution issue
rc-update add squid default
as root, for obvious reasons.