Greasemonkey script to remove redirections from Google result pages
This little Greasemonkey script cleans up Google’s result page by replacing the unnecessary redirections by real links. So long links such as http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CDkQFjAA&url=http%3A%2F%2Fwww.wired.com%2F&ei=DhDmTsjsBa3NmQX_861Y&usg=AFQjCNFHgSSEjuDwVNzzn3fXd7YJysmFGQ&sig2=0t1GLYrrHjniRivye-Jb1Q
will be replaced by just http://www.wired.com
Why install this script?
– It allows copying a link directly from Google’s result page (otherwise you need to open the link, then copy it in the browser’s bar).
– In some countries, Google can be very slow so not only you have to wait a long time for the search page to load, but you then have to wait for Google to do its redirection. This script makes Google slightly faster by skipping this unnecessary step.
The script can be downloaded there:
Download Google Links Cleanser script
And the source code is below:
// ==UserScript== // @name Google Links Cleanser // @namespace http://pogopixels.com // @description Convert the redirection links in Google's search results to direct links. // @include http://*.google.* // @include https://*.google.* // ==/UserScript== // parseUri 1.2.2 // (c) Steven Levithan <stevenlevithan.com> // MIT License function parseUri(a){var b=parseUri.options,c=b.parser[b.strictMode?"strict":"loose"].exec(a),d={},e=14;while(e--)d[b.key[e]]=c[e]||"";d[b.q.name]={};d[b.key[12]].replace(b.q.parser,function(a,c,e){if(c)d[b.q.name][c]=e});return d}parseUri.options={strictMode:false,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}} function isMangledLink(url) { var parsed = parseUri(url); if (url.indexOf("/url?") < 0) return false; if (url.indexOf("&url=") < 0) return false; return true; } parseUri.options.strictMode = true; // Get all the anchors var tags = document.getElementsByTagName('a'); for (i = 0; i < tags.length; i++) { var tag = tags[i]; var href = tag.getAttribute("href"); // Remove the onmousedown events used for tracking var onmousedownAttribute = tag.getAttribute("onmousedown"); if (onmousedownAttribute && onmousedownAttribute.indexOf("return rwt") >= 0) tag.removeAttribute("onmousedown"); if (!isMangledLink(href)) continue; // Try to extract the real URL var parsed = parseUri(href); var realUrl = ""; var query = parsed.query.split("&"); for (var j = 0; j < query.length; j++) { var items = query[j].split("="); if (items[0] == "url") { // We found the real URL realUrl = unescape(items[1]); break; } } if (realUrl == "") continue; // Skip it if we didn't find the real URL tag.setAttribute("href", realUrl); }
Update 2012-02-16:
Script has been updated so that full URLs are not required (thanks to anonymous in the comments).
Tags: google, greasemonkey, script, search
February 15th, 2012 at 1:48
Man, I wish this worked – but I still go to the redirect page first – on left and right mouseclicks. In Greasemonkey, enabled, but no effect.
February 15th, 2012 at 19:01
The script has cased to work because google uses relative urls now and the Leviathans parseUri can’t handle them in “loose” mode: http://blog.stevenlevithan.com/archives/parseuri.
You need to add
parseUri.options.strictMode = true;
just before the “// Get all the anchors” comment line.
Also the function isMangledLink seems to require absolute paths. This is unnecessary. I recommend truncating the function to:
function isMangledLink(url) {
if (url.indexOf(“/url?”) < 0) return false;
return true;
}
This will still cherry pick the redirect urls, but doesn’t care about the host or the url parameter. Host is handled by the Greasemonkey anyway and the parameter later in the script.