GreaseMonkey gottcha – script not triggering ?

In the unlikely event you haven’t discovered GreaseMonkey it’s ideal for tweaking the presentation of a website to suit your own taste.

A good example of this would be the ad sponsored block of links typically at the top of the list of search results.  These are often presented in a box with a subtly different background colour, alas this colour is usually so subtle that especially on a laptop screen you can’t see it! (if I was suspicious I’d think it was done that way on purpose!)

Doing a quick hack for this rather than searching for someone else’s script is probably quicker and certainly good practice.

My search engine of choice is startpage and I was scratching my head trying to figure out why the script wasn’t being triggered – then I looked again at the URL (check the page info when right clicking on the page with firefox)

https://startpage.com/do/metasearch.pl

The thing here is the second slash after the domain name I’d assumed that the filter https://startpage.com/* would basically capture everything – turns out this isn’t sufficient and https://startpage.com/*/* is what’s required.

Just one more minor irritation is that ID attributes are *supposed* to be unique within a document, however the div at the bottom of the results also shares the same ID.  While there are facilities to get arrays of all tags with shared class attributes, as far as I’m aware this is not the case with ID’s.  I decided to just brute force through all the div tags in a document searching for the same target ID, there may well be a more elegant way to do this but what the hey it works!

I’ve included the script here for anyone who’s not used GreaseMonkey but fancies a play…

// ==UserScript==
// @name        startpage ad
// @namespace   codifies@bedroomcoders.co.uk
// @description makes the background for the ad links actually visible
// @include     https://startpage.com/*/*
// @version     1
// @grant       none
// ==/UserScript==

//var el = document.getElementById("sponsored_container");
//el.style.backgroundColor = '#8080ff';

// *sigh* all id's *should* be unique

var all = document.getElementsByTagName("div");

for (var i=0, max=all.length; i < max; i++) {
     if (all[i].id=="sponsored_container") {
       all[i].style.backgroundColor = '#a0a0ff';
     }
}

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *