Google Anonymizer

By Aquilax Last update Nov 6, 2008 — Installed 24,052 times.

There are 5 previous versions of this script.

// ==UserScript==
// @name             Google Anonymizer
// @namespace    http://userscripts.org/users/28612
// @version         2.00.03
// @changes        Almost completly rewritten,Extended anonymization,Added WebProxy support,Added iGoogle support
// @description  Anonymizes search requests to google and removes tracking systems on the results page. It transforms you into a ghost for google.
// @include         http://*google.tld/*
// @require         http://userscripts.org/scripts/version/33024/45103.user.js
// @resource       Library1Resources http://www.fileden.com/files/2008/9/2/2077873/JavascriptLibrary/0_3_0/Library1.xml
// @resource       Library1Resources_de http://www.fileden.com/files/2008/9/2/2077873/JavascriptLibrary/0_3_0//Library1_de.xml
// @resource       Library1Resources_es http://www.fileden.com/files/2008/9/2/2077873/JavascriptLibrary/0_3_0/Library1_es.xml
// @resource       Library1Resources_fr http://www.fileden.com/files/2008/9/2/2077873/JavascriptLibrary/0_3_0/Library1_fr.xml
// @resource       Library1Resources_it http://www.fileden.com/files/2008/9/2/2077873/JavascriptLibrary/0_3_0/Library1_it.xml
// @resource      GoogleAnonymizerResources http://www.fileden.com/files/2008/9/2/2077873/GoogleAnonymizer/2_0_0/GoogleAnonymizer.xml
// ==/UserScript==

var ScriptInfos={
	name: "Google Anonymizer",
	version: "2.00.03",
	language: "en",
	idPrefix: "GA"
}

var rmga=null;
initGoogleAnonymizer();
		
function initGoogleAnonymizer()
{
	ScriptInfos.scriptUpdater=new Updater(10448,ScriptInfos.name,ScriptInfos.idPrefix,"//td[input[@name='q']]");

	getOptions();
	
	with(ScriptInfos.scriptUpdater)
	{
		actualVersion=new Version(ScriptInfos.version);
		newVersionDays=parseInt(ScriptInfos.options.GAUpdateCheckFrequency);
	}
	
	rmga=new ResoucesManager("GoogleAnonymizerResources");
	$rmc("MenuOptions",[ScriptInfos.name],showOptionsPanel);
	
	var flag1=false;
	try{anonymizeGoogle();}
	catch(ex)
	{
		flag1=true;
		GM_log(ex.message);
	}
	ScriptInfos.scriptUpdater.checkForNewVersion(ScriptInfos.scriptUpdater.newVersionHTML,flag1);
}

function anonymizeGoogle()
{
	var obj1=ScriptInfos.options;

	//removing mouse down events, removing dangerous sites redirection and adding confirm dialog for dangerous sites
	if (obj1.GARemoveMouseDown || obj1.GARewriteDangerousSitesUrl || obj1.GAConfirmDangerousSites || obj1.GARewriteImagesUrl)
	{
		//this event listener is useful if you are using scripts like autopaging or pagerization
		document.body.addEventListener("DOMNodeInserted",nodeInsertedHandler,false);
		sanitizeNode(document.body);
	}
	
	//clk function
	switch(obj1.GAClkFunction)
	{
		case "Delete": $ls("window.clk=undefined"); break;
		case "Rewrite": $ls("window.clk=function(){return true;}"); break;
	}
	
	//rwt function
	switch(obj1.GARwtFunction)
	{
		case "Delete": $ls("window.rwt=undefined"); break;
		case "Rewrite": $ls("window.rwt=function(){return true;}"); break;
	}
	
	//dealing with google's cookies
	dealWithGoogleCookies();
	
	//imilly annullated cookie
	var flag1=true;
	if (ScriptInfos.options.GAUseImillyPREFCookie)
	{
		if (getGooglePREFId()=="0000000000000000") flag1=false;
		else setImillyCookie();
	}
	
	//adding google search preferences
	var obj2=obj1.GAGoogleSearchPreferences;
	if (!$ise(obj2))
	{
		//as hidden fields to search forms
		if (obj1.GASearchPreferencesHiddenFields) addPreferencesToGoogleSearchForms(obj2);
		//to the google's PREF cook
		if (obj1.GASearchPreferencesCookie && flag1) addPreferencesToGoogleCookie(obj2);
	}
	
	//adding extra search preferences
	var obj3=obj1.GAGoogleExtraSearchPreferences;
	if (!$ise(obj3) && obj1.ExtraSearchPreferencesHiddenFields) addPreferencesToGoogleSearchForms(obj3);
	
	//Web Proxy
	if (obj1.GAUseWebProxy) changeFormsForWebProxy();
	
	//google search preferences pages
	if (location.pathname=="/preferences")
	{
		//removing google's saved preferences alert
		if (obj1.GARemoveGoogleAlertSavedPreferences) $ls("window.saving=function(){}");
		
		//catching google save preferences submit
		if (obj1.GASaveGooleSearchPreference) 
		{
			var form1=document.forms[0];
			if (obj1.GAGoogleSearchPreferences) setFormValues(form1,obj1.GAGoogleSearchPreferences);
			
			form1.addEventListener("submit",function(e){saveGoogleSearchPreferences(getFormValues(e.target,function(element,value){return element.type=="hidden"?null:value;}));},false);		
		}
	}
	
	//iGoogle preferences
	if (location.pathname=="/ig") setIGooglePreferences();
}

function getGooglePREFId(failReturnValue)
{
	var obj1=getCookie("PREF");
	return obj1?/ID=(\w+):/i.exec(obj1.value)[1]:failReturnValue;
}

function getIGTPCookie()
{
	var obj1=getCookie("IGTP");
	return obj1?obj1.value.split(":"):null;
}

function nodeInsertedHandler(e)
{
	dealWithGoogleCookies();
	sanitizeNode(e.relatedNode);
}

function changeFormsForWebProxy()
{
	var array1=document.forms;
	for(var num1=0;num1<array1.length;num1++)
	{
		var obj1=array1[num1];
		obj1.setAttribute("onsubmit","return false;");
		obj1.addEventListener("submit",submitToWebProxy,false);
	}
}

function submitToWebProxy(e)
{
	var obj1=ScriptInfos.options
	var text1="{0}?{1}".format(e.target.action,formValuesToString(getFormValues(e.target)));
	
	var obj2=$ce("form",null,{action:obj1.GAWebProxyAction,method:obj1.GAWebProxyMethod,target:obj1.GAWebProxyTarget,enctype:obj1.GAWebProxyEncoding});
	for(var text2 in obj1.GAWebProxyFields) obj2.appendChild($ce("input",null,{name:text2,value:obj1.GAWebProxyFields[text2].format(text1),type:"hidden"}));
	document.body.appendChild(obj2);
	obj2.submit();
	document.body.removeChild(obj2);
}

function isLoggedInGoogleNetwork()
{
	return getCookie("SID")!=null;
}

function dealWithGoogleCookies()
{
	var obj1=ScriptInfos.options;
	if (!obj1.GADeleteGoogleCookies || (obj1.GANotWhenLoggedInGoogleNetwork && isLoggedInGoogleNetwork())) return;
	if (obj1.GADeleteGoogleCookiesBeginning) deleteCookies();
	if (obj1.GADeleteGoogleCookiesEnd && !ScriptInfos.addedUnloadWindowListener)
	{			
		ScriptInfos.addedUnloadWindowListener=true;
		window.addEventListener("unload",deleteCookies,false);
	}
}

function deleteCookies()
{
	var array1=getAllCookies();
	var flag1=ScriptInfos.options.GALogDeletedCookies;
	for(var num1=0;num1<array1.length;num1++)
	{
		var obj1=array1[num1];
		if (obj1.name=="PREF" && ScriptInfos.options.GALeavePREFCookie) continue;
		if (obj1.name=="IGTP" && ScriptInfos.options.GAIGoogleLeaveIGTPCookie) continue;
		var flag2=deleteCookie(obj1);
		if (flag1) GM_log(rmga.getText("DeletedCookie",[obj1.name,flag2]));
	}
}

function setImillyCookie()
{
	//Setting imilly cookie
	var text1=location.hostname;
	text1=text1.substring(text1.indexOf(".")+1);
	setCookie({name:"PREF",value:"ID=0000000000000000:LD=en:TM=1115409441:LM=1129104254:S=kSuablMgN8pP9-91",expires:"Sun, 17-Jan-2038 19:14:07 GMT",domain:text1});
}

function setIGooglePreferences()
{
	var obj1=ScriptInfos.options;
	var array1=getIGTPCookie();
	if (array1 && obj1.GAIGoogleSaveIGTPCookie)
	{
		var text1=obj1.GAIGoogleSavedIGTPCookie;
		var flag1=text1==array1[0];
		if ($x1("//input[@class='setup_save_button']") && text1 && !flag1)
		{
			//resetting IGTP  cookie
			setCookie({name:"IGTP",value:"{0}:{1}".format(text1,array1[1]),path:location.pathname,domain:location.hostname});
			//reloading page
			if (obj1.GAIGoogleReloadPage) location.reload();
		}
		
		//checking every 1 sec if IGTP has changed
		setInterval(saveIGooglePreferences,1000);
	}
	
	//removing sign up label
	if (obj1.GAIGoogleRemoveSignUp)
	{
		var div1=$id("new_user_save_box");
		if (div1) div1.parentNode.removeChild(div1);
	}
}

function saveIGooglePreferences()
{
	var obj1=ScriptInfos.options;
	var array1=getIGTPCookie();
	if (array1)
	{
		var text1=obj1.GAIGoogleSavedIGTPCookie;
		var flag1=text1==array1[0];
		if (!flag1)
		{
			obj1.GAIGoogleSavedIGTPCookie=array1[0];
			setOptions();
		}
	}
}

function addPreferencesToGoogleSearchForms(preferences)
{
	Array.forEach(document.forms,function(form){setFormValues(form,preferences,function(form,element,value){if (typeof(element)=="string") form.appendChild($ce("input",null,{type:"hidden",name:element,value:value}));});});
}

function addPreferencesToGoogleCookie(values)
{
	var text1="http://"+document.domain;
	var request1=new XMLHttpRequest();
	request1.open("GET",text1+"/preferences",false);
	request1.send(null);
	if(request1.status!=200) {GM_log("Failed to get google's preference page, domain: "+text1); return;}
	var match1=/<input\s+type="hidden"\s+name="sig"\s+value="(.+?)">/gmi.exec(request1.responseText);
	if (match1==null) {GM_log("Failed to parse sig hidden field, domain: "+text1); return;}
	var match2=/<input\s+type=submit.+?value="(.+?)"\s+name="submit2">/gmi.exec(request1.responseText);
	if (match2==null) {GM_log("Failed to parse submit2 submit field, domain: "+text1); return;}
	var text2=text1+"/setprefs?sig="+encodeURIComponent(match1[1])+"&"+formValuesToString(values)+"&q=&prev="+encodeURIComponent(document.location.toString())+"&submit2="+encodeURIComponent(match2[1]);
	var request2=new XMLHttpRequest();
	request2.open("GET",text2,false);
	request2.send(null);
	if(request2.status!=200) {GM_log("Failed to set google's preferences, domain: "+text1+", get:"+text2); return;}
}

function sanitizeNode(node)
{
	var array1=node.getElementsByTagName("A");
	var flag1=ScriptInfos.options.GAGoogleSearchPreferences && ScriptInfos.options.GAGoogleSearchPreferences.newwindow=="1";
	var flag2=ScriptInfos.options.GARewriteDangerousSitesUrl || ScriptInfos.options.GAConfirmDangerousSites;
	var flag3=ScriptInfos.options.GARewriteImagesUrl || ScriptInfos.options.GAAddLinkImagesOriginalPage;
	for (var num1=0;num1<array1.length;num1++)
	{
		var link1=array1[num1];
		
		//removing mouse down event
		if (ScriptInfos.options.GARemoveMouseDown) link1.removeAttribute("onmousedown");
		
		//google's dangerous sites
		if (flag2 && link1.href.match(/google\.[^?]*?\/interstitial\?url=(.*)/gmi))
		{
			var text1=decodeURIComponent(RegExp.$1);
			//rewriting link
			if (ScriptInfos.options.GARewriteDangerousSitesUrl)
			{
				link1.setAttribute("href",text1);
				link1.setAttribute("title","Warning - visiting this web site may harm your computer!");
				link1.setAttribute("style","color:red;");
				
				link1.insertBefore($ce("img",null,{border:"0px",src:rmga.getText("WarningImage")}),link1.firstChild);
			}
			//adding confirm dialog
			if (ScriptInfos.options.GAConfirmDangerousSites) 
			{
				link1.setAttribute("onclick","return confirm('Warning - visiting this web site may harm your computer!\\nContinue to "+text1+" at your own risk?');");
			}
		}

		//googe's images
		if (flag3 && link1.href.match(/imgres\?imgurl=(.*?)&imgrefurl=(.*?)(?:&|$)/gmi))
		{
			//rewriting image link
			if (ScriptInfos.options.GARewriteImagesUrl)
			{ 
				link1.setAttribute("href",decodeURIComponent(RegExp.$1));
				if (flag1) link1.target="_blank";
			}
			//adding link to the original page
			if (ScriptInfos.options.GAAddLinkImagesOriginalPage)
			{
				var element1=link1.parentNode;
				var element2=link1.nextSibling;
			
				element1.insertBefore($ce("br"),element2);
				element1.insertBefore($ce("a","Source Page",{href:decodeURIComponent(RegExp.$2),target:flag1?"_blank":""}),element2);
			}
		} 
		
		//fixing similar page links
		if (link1.href.indexOf("related:/interstitial?url=http://")!=-1) link1.setAttribute("href",link1.href.replace("related:/interstitial?url=http://",""));
	}
}

function showOptionsPanel(reset)
{
	var div1=addModalDiv(hideOptions);
	var div2=addOptionsPanel(reset);
	
	setFormValues($id("{0}FormOptions".format(ScriptInfos.idPrefix)),ScriptInfos.options);
	if ($isd(ScriptInfos.scriptUpdater.lastNewVersionCheckDate)) $id("{0}LastUpdate".format(ScriptInfos.idPrefix)).textContent=ScriptInfos.scriptUpdater.lastNewVersionCheckDate.toLocaleString();
	$id("{0}GoogleId".format(ScriptInfos.idPrefix)).textContent=getGooglePREFId(rmga.getText("NoGooglePREFId"));
	$id("{0}WebProxyFields".format(ScriptInfos.idPrefix)).value=$o2t(ScriptInfos.options.GAWebProxyFields);
	$id("{0}GoogleSearchPreferences".format(ScriptInfos.idPrefix)).value=$o2t(ScriptInfos.options.GAGoogleSearchPreferences);
	$id("{0}GoogleExtraSearchPreferences".format(ScriptInfos.idPrefix)).value=$o2t(ScriptInfos.options.GAGoogleExtraSearchPreferences);
	
	div1.className="";
	div2.className="";
	ScriptInfos.optionsPanelVisible=true;
}

function addOptionsPanelStyle()
{
	if (!ScriptInfos.addedOptionPanelStyle)
	{
		ScriptInfos.addedOptionPanelStyle=true;
		$as(rmga.getText("OptionsContainerStyle",ScriptInfos.idPrefix));
	}
}

function addOptionsPanel(reset)
{
	var div1=$id("{0}OptionsContainer".format(ScriptInfos.idPrefix));
	if (reset) {div1.parentNode.removeChild(div1); div1=null;}
	if (div1==null)
	{
		addOptionsPanelStyle();
		addNoPaddedListStyle();
		
		var array1=new Array();
		array1.push(rmga.getHTMLTexts("OptionsGeneral"));
		array1.push(rmga.getHTMLTexts("OptionsUpdater"));
		array1.push(rmga.getHTMLTexts("OptionsWebProxy"));
		array1.push(rmga.getHTMLTexts("OptionsCookies"));
		array1.push(rmga.getHTMLTexts("OptionsJavascriptFunctions"));
		array1.push(rmga.getHTMLTexts("OptionsLinkRedirection"));
		array1.push(rmga.getHTMLTexts("OptionsSearchPreferences"));
		array1.push(rmga.getHTMLTexts("OptionsExtraSearchPreferences"));
		array1.push(rmga.getHTMLTexts("OptionsIGooglePreferences"));

		div1=stringToHTML(rmga.getHTMLTexts("OptionsContainer",[ScriptInfos.idPrefix,rmga.getHTMLTexts("OptionsLeftSide",[ScriptInfos.idPrefix,null,ScriptInfos.version]),array1.join("\n")]));
		document.body.appendChild(div1);
		
		$id("{0}CheckForUpdate".format(ScriptInfos.idPrefix)).addEventListener("click",function(){ScriptInfos.scriptUpdater.checkForNewVersion(ScriptInfos.scriptUpdater.newVersionDialog,true);},false);
		$id("{0}Apply".format(ScriptInfos.idPrefix)).addEventListener("click",saveOptions,false);
		$id("{0}OK".format(ScriptInfos.idPrefix)).addEventListener("click",saveOptions,false);
		$id("{0}Cancel".format(ScriptInfos.idPrefix)).addEventListener("click",hideOptions,false);
	}
	
	return div1;
}

function hideOptions()
{
	ScriptInfos.optionsPanelVisible=false;
	$id("{0}ModalDiv".format(ScriptInfos.idPrefix)).className="hidden";
	$id("{0}OptionsContainer".format(ScriptInfos.idPrefix)).className="hidden";
}

function saveOptions(e)
{
	var obj1=getFormValues(e.target.form);
	try{obj1.GAWebProxyFields=$t2o(obj1.GAWebProxyFields);}
	catch(ex)
	{
		alert(rmga.getText("ConveringTextToObjectError","Search Preferences",ex.message)); 
		$t2o(obj1.GAWebProxyFields);
	}

	try{obj1.GAGoogleSearchPreferences=$t2o(obj1.GAGoogleSearchPreferences);}
	catch(ex)
	{
		alert(rmga.getText("ConveringTextToObjectError","Search Preferences",ex.message)); 
		$t2o(obj1.GAGoogleSearchPreferences);
	}
	try{obj1.GAGoogleExtraSearchPreferences=$t2o(obj1.GAGoogleExtraSearchPreferences);}
	catch(ex)
	{
		alert(rmga.getText("ConveringTextToObjectError","Extra Search Preferences",ex.message)); 
		$t2o(obj1.GAGoogleExtraSearchPreferences);
	}
	ScriptInfos.options=obj1;
	if (e.target.id=="{0}OK".format(ScriptInfos.idPrefix)) hideOptions();
	setOptions();
}

function saveGoogleSearchPreferences(preferences)
{
	var obj1=ScriptInfos.options;
	if (!obj1.GAGoogleSearchPreferences || preferences.toSource()!=obj1.GAGoogleSearchPreferences.toSource())
	{
		obj1.GAGoogleSearchPreferences=preferences;
		setOptions();
		if (ScriptInfos.options.GAShowAnonymizerAlertSavedPreferences) alert(rmga.getText("SearchPreferencesSavedLocally",ScriptInfos.name));
	}
}

function setOptions()
{
	setObject("GAOptions",ScriptInfos.options);
	ScriptInfos.language=ScriptInfos.options.GALanguage;
}

function getOptions()
{
	ScriptInfos.options=getObject("GAOptions");
	if (ScriptInfos.options==null) ScriptInfos.options=new Object();
	if (ScriptInfos.options.GAVersion!=ScriptInfos.version)
	{
		var obj1=ScriptInfos.options;
		var obj2={
			GALanguage:"en",
			GAUpdateCheckFrequency:"1",
			GAWebProxyAction:"http://filtersbite.com/includes/process.php?action=update",
			GAWebProxyMethod:"Post",
			GAWebProxyEncoding:"application/x-www-form-urlencoded",
			GAWebProxyFields:({u:"{0}", stripJS:"on", stripObjects:"on"}),
			GADeleteGoogleCookies:"on",
			GANotWhenLoggedInGoogleNetwork:"on",
			GADeleteGoogleCookiesBeginning:"on",
			GARemoveMouseDown:"on",
			GAClkFunction:"Delete",
			GARwtFunction:"Delete",
			GARewriteDangerousSitesUrl:"on", 
			GAConfirmDangerousSites:"on", 
			GARewriteImagesUrl:"on", 
			GAAddLinkImagesOriginalPage:"on",
			GASaveGooleSearchPreference:"on",
			GARemoveGoogleAlertSavedPreferences:"on", 
			GAShowAnonymizerAlertSavedPreferences:"on",
			GASearchPreferencesHiddenFields:"on", 
			GAGoogleSearchPreferences:undefined,
			GAGoogleExtraSearchPreferences:undefined,
			GAIGoogleIGTPCookie:"Leave",
			GAIGoogleReloadPage:null,
			GAIGoogleRemoveSignUp:null,
			GASavedIGoogleIGTPCookie:""
		};
		for(var name in obj2) if (obj1[name]!=null) {obj2[name]=obj1[name];}
		obj2.GAVersion=ScriptInfos.version;
		
		ScriptInfos.options=obj2;
		
		setOptions();
	}
	ScriptInfos.language=ScriptInfos.options.GALanguage;
	return ScriptInfos.options;
}