Blog Archives

BackSnapper – My First Chrome Extension


On a whim tonight, I whipped up my first Google Chrome extension in about 2 hours. A non-trivial amount of time was spent writing it up and making the icons. It’s obviously very simple, but it replicates one of my favorite features of Safari 3: SnapBack (the feature got eviscerated in Safari 4).

Basically all this extension does is add a button to the Chrome toolbar that you can click to jump back to the first page in a tab’s history. I realize the button and icons are ugly; I am not a design-type person.

The BackSnapper button once installed in Chrome 4

The BackSnapper button once installed in Chrome 4

You can read a bit more about my BackSnapper extension, download it if you’re using the developer edition of Google Chrome (currently version 4), or view the code on github.

As Chrome rolls out the Extensions Gallery, I’ll deploy the extension out there. It could probably use some better options, and some smarter heuristics for determining where the beginning is, but for my purposes it gives me the magic button I want.


You can install the BackSnapper extension from the .zip file more or less by following Step 4 in these instructions. Note that at present this only works for the dev channel (version 4) of Google Chrome.

  1. Download and unpack the .zip file
  2. Select Extensions from the Tools menu.
  3. Click “Developer Mode” on the right in the Extensions display.
  4. Click “Load unpacked extension…” and select the unpacked BackSnapper folder

Development Tips

There were a few things I learned getting this working that weren’t immediately obvious from the documentation:

  • The debug console is per tab
  • You may need to select your injected content Javascript in the debug console to view logged messages
  • For simple calls into content scripts, chrome.tabs.sendRequest() is sufficient, you don’t need to use the more complicated connect() message passing calls.

There were also a few things I couldn’t figure out:

  • Why won’t the current developers-only Extensions Gallery accept my unsigned zip file?
  • Why can’t I determine the current URL in the history after having called history.go()? location.href remains unchanged, and history.current is undefined.
Posted in Code Projects, Computers Tagged with: , , , , ,

Chrome DNS Caching

The Problem

Google Chrome has an interesting feature: it maintains its own DNS cache “to improve page load performance”. Whether or not this is a good feature is a debate I’m not terribly interested in, but I have found that it can cause problems if a web site’s DNS changes for whatever reason, so I’ve decided to disable it. It’s a pretty easy change.

I noticed the problem because Radio Paradise upgraded its web servers, in the process changing IP addresses. Chrome has been giving me weird errors on that site recently, and this change only compounded them because I was being oddly redirected. Bill Goldsmith (DJ of said internet radio station) pointed out that it was a problem with Chrome’s DNS caching, a feature I was until that point unaware of. I have been using Chrome since it was made available for public beta, but perhaps Bill’s point that it “may not be ready for prime time” has some truth in it. I do not know if this DNS cache is stored locally, or if Chrome asks Google for cached information.

The Solution

Extremely easy: turn the setting off, and restart Chrome.

  1. In the Tools menu, open Options and go to the Under the Hood tab
  2. Uncheck the option “Use DNS pre-fetching to improve page load performance”, as shown here:  

    Google Chrome Under The Hood Options Tab

    Google Chrome Under The Hood Options Tab

  3. Restart Chrome. Note that you have to close all Chrome tabs, even though they are separate processes, for this setting change to take effect.
Posted in Stupid Tricks Tagged with: , , ,

Nicolas Ward

Software engineer in Natural Language Processing research by day; gamer, reader, and aspiring UltraNurd by night. Husband to Andrle
Creative Commons License

Post History

July 2018
« Jun