Greasemonkey script to remove redirections from Google result pages
Monday, December 12th, 2011This 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).