Home » 中文 » Google代码欣赏 » google.loader 代码欣赏 « 技术人员写KB的好处 | 用匿名函数避免命名冲突 »
缘起
五一期间和老冒聊天,其中就提起来保持技术的敏感性是聊起技术型CEO的优势,也是一直需要不断努力充电的。很受启发,所以就顺手拿起一段Google的Javascript,欣赏一番。
这段JavaScript的URI(沿用Tim Berneris Lee喜欢用的URI而不是URL)很酷:
http://www.google.com/jsapi
单单挑这一段代码有几个原因:
<script type="text/javascript" src="http://www.google.com/jsapi?key=YOUR_KEY_HERE"></script>其中调用的就是这段神秘的JavaScript。
<script type="text/javascript">
google.load("feeds", "1");
</script>
google_exportSymbol函数拿到Google里面搜索,居然只有一篇文章提到,而且还仅仅是贴了代码。难道这么重要的一个文件,全世界的开发者没有兴趣分析一下吗?代码全文
经过简单的代码格式化(仅仅加上回车),这段代码看起来是这样的。努力想想,他究竟是干什么的呢?
if (!google) {
var google = {};
}
if (!google.loader) {
google.loader = {};
google.loader.ServiceBase = "http://www.google.com/uds";
google.loader.ApiKey = "internal";
google.loader.KeyVerified = true;
google.loader.LoadFailure = false;
google.loader.AdditionalParams = "";
(function() {
Function.prototype.__google_inherits=function(c){
var a=function(){};
a.prototype=c.prototype;
this.prototype=new a;
this.prototype.__google_super=function(b,d,e,f){
var n=Array.prototype.h.apply(arguments,[1,arguments.length]);
return b.apply(this,n)
}
};
var h=null;
var l=false;
function i(c){this.a=c}
i.prototype.c=function(c,a){
var b="";
if(a!=undefined){
if(a["locale"]!=undefined){
b+="&hl="+encodeURIComponent(a["locale"])
}
if(a["nocss"]!=undefined){
b+="&output="+encodeURIComponent("nocss="+a["nocss"])
}
if(a["other_params"]!=undefined){
b+="&"+a["other_params"]
}
}
if(h!=null&&!l){
b+="&key="+encodeURIComponent(h);
l=true
}
return google.loader.ServiceBase+"/?file="+this.a+"&v="+c+google.loader.AdditionalParams+b
};
function k(c,a,b,d,e,f){
this.a=c;
this.g=a;
this.f=b;
this.d=d;
this.e=e;
this.b=f
}
k.__google_inherits(i);
k.prototype.c=function(c,a){
var b="";
if(this.d!=undefined){
b+="&"+this.d+"="+encodeURIComponent(h?h:google.loader.ApiKey)
}
if(this.e!=undefined){
b+="&"+this.e+"="+encodeURIComponent(c)
}
if(a!=undefined&&this.b!=undefined){
for(var d in a){
if(this.b[":"+d]!=undefined){
b+="&"+this.b[":"+d]+"="+encodeURIComponent(a[d])
}
else
if(d=="other_params"){
b+="&"+a[d]
}
}
}
google[this.a]={};
if(!this.f&&b!=""){
b[0]="?"
}
return this.g+b
};
function o(c,a,b){
var d=j[":"+c];
if(!d){
var e=new Error("Module: '"+c+"' not found!");
e.toString=function(){
return this.message
};
throw e;
}
else{
m("script",d.c(a,b))
}
}
function q(c){
var a=window;
if(a.addEventListener){
a.addEventListener("load",c,false)
}
else if(a.attachEvent){
a.attachEvent("onload",c)
}
else{
a["onload"]=c
}
}
function p(c){
var a=window.location.href;
var b;
var d=a.length;
for(var e in c){
var f=a.indexOf(e);
if(f!=-1&&fb=e;
d=f
}
}
h=b?c[b]:null
}
function m(c,a){
if(c=="script"){
document.write('<script src="'+a+'" type="text/javascript"><\/script>')
}else if(c=="css"){
document.write('<link href="'+a+'" type="text/css" rel="stylesheet"></link>')
}
}
function g(c,a){
var b=c.split(/\./);
var d=window;
for(var e=0;ed=d[b[e]]
}
d[b[b.length-1]]=a
}
var j={};
j[":search"]=new i("search");
j[":feeds"]=new i("feeds");
j[":maps"]=new k("maps","http://maps.google.com/maps?file=googleapi",true,"key","v",{":locale":"hl"});
g("google.load",o);
g("google.setOnLoadCallback",q);
g("google.loader.writeLoadTag",m);
g("google.loader.setApiKeyLookupMap",p);
g("google_exportSymbol",g);
})()
}
真的要分析完全这里面的有趣的东西,还真是要点时间。不如分步骤,一个话题一篇文章,这样看起来容易一些。估计一天晚上也写不完,正好大家和我一起来看这段代码。
Posted by Jian Shuo Wang at May 14, 2007 11:19 PM
没去看代码出处,光是看你贴出来的代码感觉和楼上一样,里面变量都是用a,b,c来命名,不太符合命名规范,估计是处理过了的。
Posted by: bobrow on May 15, 2007 09:56 PM没去看代码出处,光是看你贴出来的代码感觉和楼上一样,里面变量都是用a,b,c来命名,不太符合命名规范,估计是处理过了的,。
Posted by: Yooyil on April 4, 2008 04:06 PM