GlimmerBlocker Logo


HTTP based ad blocker for Mac OS X

No hacks, no instability
Upgrade Safari whenever you like, no need to wait for an upgraded hack

GlimmerBlocker is no longer maintained and should no longer be used as web sites have migrated from using plain http to using https (i.e. encrypted) which prohibits modification by a proxy unless you resort to install custom SSL certiticates on the client.

You should use a browser extension instead.

It was made as a hobby project during 2007-2008 by Peter Speck. It features both a custom http server and http client and a Mac OS X control panel.

GlimmerBlocker did not only block requests but also allowed for adding custom css and javascript to the pages. It also allowed for modification of the page html before the browser receives the html, which made some modifications much easier than DOM based modifications.

How transformation script works

The transform javascript is executed by GlimmerBlocker and not by Safari. The script is never sent to Safari but only the result of running the script inside the GlimmerBlocker proxy.

How the transformation works:

  1. GlimmerBlocker retrieves the html document from the server.
  2. The html is stored as a simple string in the global variable t. It is not stored as a DOM object like browsers do.
  3. The transform script is executed. The script should modify the global variable to its liking by e.g. removing all <script> elements.
  4. The updated value of the t variable extracted and used for the following steps.
  5. Any css/js from the css/js tabs are added.
  6. GlimmerBlocker sends the result to Safari.


The content is stored in the global t object. See the Object Reference for all the utilities and information that GlimmerBlocker provides.

Html transformation examples

Simple subsitution of contents:

t = t.replace(/documentation/, "pure void");

A convenience method is provided for this, so the above code can be reduced to:

replace(/documentation/, "pure void");

Some sites don't provide a desciptive <title> but uses the company name for all pages. This can be fixed by extracting a resonable name from the html body and updating the <title> using the convenience function gb.setDocumentTitle():

var m = t.match(/<h1><span id="item_name">(.+?)<\/span><\/h1>/i);
if (m)

Some sites works best without Javascript at all because they do awful things like using Flashâ„¢ where a simple <img> would suffice. A simple convenience function fixes this:


Got a good example which would improve this page? Send it to: []

xml samples

Look at the feedburner rule in the 'Site-specific ad removal' filter.