防止Google对搜索结果重定向

最近,hzqtc 推荐了一个GreaseMonkey脚本,可以把Google搜索的结果分两栏显示,自动加载后一页的内容,防止结果经过重定向,还可以为结果编号,加载favicon等等。

这个脚本目前在我这里会有一个问题,会导致Google的“Show more results from xxxx”失效。我会用到这个功能,于是只好不用这个“神一样的GM脚本”了 :oops:

那么还是有其它做法达到一些关键功能的,比如自动加载后一页可以用Firefox的AutoPager扩展完成,在支持CSS3的Firefox中用Stylish扩展,为搜索结果页应用 .med { -moz-column-count: 2;} 这样的样式就有两栏了。

关于Google把搜索结果重定向,跟踪用户点击这一点,确实令人很不爽。hzqtc曾经介绍的方法现在由于Google使用AJAX加载搜索结果,变得不能用了。那么再做一个可以用的吧 :roll:

Google搜索结果的链接都写有onmousedown="rwt(....)",这个rwt函数会改写用户单击的链接:

window.rwt=function(a,d,e,i,j,f,k,l){
	try{
		if(a===window){
			a=window.event.srcElement;
			while(a){
				if(a.href)break;
				a=a.parentNode
			}
		}
		var b=encodeURIComponent||escape;
		var m=["/url?sa=t","\x26source\x3dweb",d?"&oi="+b(d):"",e?"&cad="+b(e):"","&ct=",b(i||"res"),"&cd=",b(j),"&ved=",b(l),"&url=",b(a.href).replace(/\+/g,"%2B"),"&ei=","dIHqSoSTDsOXkAX9huGPDw",f?"&usg="+f:"",k].join("");
		a.href=m;a.onmousedown=""
	}
	catch(n){}
	return true
};

那么不同的对策也有了 :-)

  • 消灭(带有rwt函数的)onmousedown
    由于Google使用AJAX加载搜索结果,要在其加载完成后才去做这个事情
  • 替换掉rwt函数

这里我使用第二种方法,比较简单一些,如何用GreaseMonkey脚本替换一个js函数在GreaseMonkey的Wiki有说明。

最后的脚本就是这样的,可以在这里找到:

function rwt() {
	return true;
}
 
function embedFunction(s) {
	document.body.appendChild(document.createElement('script')).innerHTML=s.toString().replace(/([\s\S]*?return;){2}([\s\S]*)}/,'$2');
}
 
embedFunction(rwt);

6 thoughts on “防止Google对搜索结果重定向

  1. 其实现在Google的重定向分两种,一种是搜索结果本身的重定向,这个就是由onmousedown来做的,我的方法是直接removeAttribute(‘onmousedown’)。而另一种是搜索结果下面的小链接,这些都是有迹可循的,直接把正确的URL提取出来替换掉就行了。

  2. @hzqtc : 似乎现在href写的都是原本的地址了,GM脚本执行的时候Google还没有加载完搜索结果,这时候GM脚本看不到搜索结果的链接,所以你可能要等一等才能去用removeAttribute。

  3. @quark : 现在的情况是,本来Href是正常的,等你点击之后就被rewrite了,所以其实不需要知道搜索结果本来的链接是什么。我就在GM里面把onmousedown事件都remove掉,是ok的呢。

Leave a Reply

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

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>