Google Maps API的库JS文件分析(1)
在Google Maps API提供的JS文件中,引用了一个后台的JS库文件,该文件针对不同的浏览器有三个版本,这几天因为我想给我的Google Map扩展一些功能,所以研究了这个文件,我现在正打算陆续将我注释过的该文件放在网上,该文件一共有7000多行,我会分段渐渐的注释出来,我是按照分类注释的,所以并不会按照该JS文件顺序。
该文件Google作了处理,所有的变量名都被处理成了简单的a,b,c,d之类,所以理解起来比较费劲。
该JS文件是以IE版本的http://maps.google.com/mapfiles/maps.21.js来分析的,其他的几个我觉得基本的架构也应该差不多,所以我没有仔细看,实际上,这个文件Google也会不停的更新(在我写这个文章的时候,我发现Google已经更新到maps.25.js了),不过我想架构上也不会有太大的变动吧。
由于该文件是在比较复杂,所以难免会出现理解错误的情况,请谅解!
下面是第一个:
1
//返回空的函数,在不支持XML解析的时候使用本函数返回空
2
function Gb(a)
3
{
4
return null
5
};;
6
//通过设置windows的参数将类和对象公开
7
function Ab(a)
8
{
9
var b=a||window;
10
b._MapsApplication=v;
11
b._VPage=oa;
12
b._Point=r;
13
b._Size=H;
14
b._Bounds=C;
15
b._Map=l;
16
b._Icon=ea;
17
b._Marker=K;
18
b._Polyline=E;
19
//下面几个是集成的地图类型对象
20
b._LargeMapControl=ca;
21
b._SmallMapControl=ua;
22
b._SmallZoomControl=va;
23
b._MapTypeControl=X;
24
25
b._GoogleMapMercSpec=w;
26
b._KeyholeMapMercSpec=D;
27
b._HybridMapSpec=M;
28
b._KatrinaMapSpec=J;
29
b._GOOGLE_MAP_TYPE=null;
30
b._SATELLITE_TYPE=null;
31
b._HYBRID_TYPE=null;
32
b._KATRINA_TYPE=null;
33
b._DocumentTransport=Ca;
34
b._XmlHttp=Ja;
35
b._Xml=ya;
36
b._Xslt=O;
37
b._Event=j;
38
b._Timer=R;
39
b._Log=z;
40
b._makePasteBox=Bb;
41
b.GMapsApplication=v;
42
b.GVPage=oa;
43
//下面几个就是在Google Maps API中公开的对象
44
b.GPoint=r;
45
b.GSize=H;
46
b.GBounds=C;
47
b.GMap=l;
48
b.GIcon=ea;
49
b.GMarker=K;
50
b.GPolyline=E;
51
52
b.GControlPosition=$;
53
b.G_ANCHOR_TOP_LEFT=0;
54
b.G_ANCHOR_TOP_RIGHT=1;
55
b.G_ANCHOR_BOTTOM_LEFT=2;
56
b.G_ANCHOR_BOTTOM_RIGHT=3;
57
//下面几个是一些集成的控件对象
58
b.GLargeMapControl=ca;
59
b.GSmallMapControl=ua;
60
b.GSmallZoomControl=va;
61
b.GMapTypeControl=X;
62
b.GScaleControl=ja;
63
64
b.G_MAP_DEFAULT_COPYRIGHTS=Ac;
65
b.G_MAP_API_COPYRIGHTS=xc;
66
b.GGoogleMapMercSpec=w;
67
b.GKeyholeMapMercSpec=D;
68
b.GHybridMapSpec=M;
69
b.GKatrinaMapSpec=J;
70
if(window.createMapSpecs)
71
{
72
var c=window.createMapSpecs();
73
b.G_MAP_TYPE=c[0];
74
b.G_SATELLITE_TYPE=c[1];
75
b.G_HYBRID_TYPE=c[2];
76
b.G_KATRINA_TYPE=c[3]
77
}
78
else
79
{
80
b.G_MAP_TYPE=null;
81
b.G_SATELLITE_TYPE=null;
82
b.G_HYBRID_TYPE=null;
83
b.G_KATRINA_TYPE=null
84
}
85
b.GDocumentTransport=Ca;
86
b.GXmlHttp=Ja;
87
b.GXml=ya;
88
b.GXslt=O;
89
b.GEvent=j;
90
b.GTimer=R;
91
b.GLog=z;
92
b.GMakePasteBox=Bb
93
}
94
function nd(a,b,c)
95
{
96
var d=[];
97
var e=[a];
98
if(a=="https:")
99
{
100
e.unshift("http:") //shift:将指定的元素插入数组开始位置并返回该数组。
101
}
102
b=b.toLowerCase();
103
var f=[b];
104
var i=b.split(".");
105
//下面的代码真的不知道在搞什么,如果存在www则删除,否则加上……,
106
//对于www.step1.cn会得到step1.cn,如果对于mail.step1.cn却得到www.mail.step1.cn
107
if(i[0]=="www")
108
{
109
i.shift() //shift:移除数组中的第一个元素并返回该元素。
110
}
111
else
112
{
113
i.unshift("www")
114
}
115
f.push(i.join("."));
116
c=c.split("/");
117
var g=[];
118
while(c.length>1)
119
{
120
c.pop();
121
g.push(c.join("/")+"/")
122
}
123
for(var h=0;h<e.length;++h)
124
{
125
for(var m=0;m<f.length;++m)
126
{
127
for(var o=0;o<g.length;++o)
128
{
129
d.push(e[h]+"//"+f[m]+g[o])
130
}
131
}
132
}
133
return d
134
}
135
//本代码是检测验证码的,很容易就可以看出,如果_apiHash没有设置,则自动跳过检测
136
if(typeof _apiHash!="undefined")
137
{
138
var ed=_apiHash;
139
var Fb=nd(window.location.protocol,window.location.host,window.location.pathname);
140
var Db=false;
141
for(var Wa=0;Wa<Fb.length;++Wa)
142
{
143
var ld=Fb[Wa];
144
var md=kd(ld);
145
if(ed==md)
146
{
147
Ab(); //初始化地图设置,执行这个之后就可以使用地图对象了
148
Db=true;
149
break
150
}
151
}
152
if(!Db)
153
{
154
_c=false;
155
alert(_mApiBadKey)
156
}
157
}
158
else
159
{
160
Ab()
161
};
//返回空的函数,在不支持XML解析的时候使用本函数返回空2
function Gb(a)3
{4
return null5
};;6
//通过设置windows的参数将类和对象公开7
function Ab(a)8
{9
var b=a||window;10
b._MapsApplication=v;11
b._VPage=oa;12
b._Point=r;13
b._Size=H;14
b._Bounds=C;15
b._Map=l;16
b._Icon=ea;17
b._Marker=K;18
b._Polyline=E;19
//下面几个是集成的地图类型对象20
b._LargeMapControl=ca;21
b._SmallMapControl=ua;22
b._SmallZoomControl=va;23
b._MapTypeControl=X;24

25
b._GoogleMapMercSpec=w;26
b._KeyholeMapMercSpec=D;27
b._HybridMapSpec=M;28
b._KatrinaMapSpec=J;29
b._GOOGLE_MAP_TYPE=null;30
b._SATELLITE_TYPE=null;31
b._HYBRID_TYPE=null;32
b._KATRINA_TYPE=null;33
b._DocumentTransport=Ca;34
b._XmlHttp=Ja;35
b._Xml=ya;36
b._Xslt=O;37
b._Event=j;38
b._Timer=R;39
b._Log=z;40
b._makePasteBox=Bb;41
b.GMapsApplication=v;42
b.GVPage=oa;43
//下面几个就是在Google Maps API中公开的对象44
b.GPoint=r;45
b.GSize=H;46
b.GBounds=C;47
b.GMap=l;48
b.GIcon=ea;49
b.GMarker=K;50
b.GPolyline=E;51

52
b.GControlPosition=$;53
b.G_ANCHOR_TOP_LEFT=0;54
b.G_ANCHOR_TOP_RIGHT=1;55
b.G_ANCHOR_BOTTOM_LEFT=2;56
b.G_ANCHOR_BOTTOM_RIGHT=3;57
//下面几个是一些集成的控件对象58
b.GLargeMapControl=ca;59
b.GSmallMapControl=ua;60
b.GSmallZoomControl=va;61
b.GMapTypeControl=X;62
b.GScaleControl=ja;63

64
b.G_MAP_DEFAULT_COPYRIGHTS=Ac;65
b.G_MAP_API_COPYRIGHTS=xc;66
b.GGoogleMapMercSpec=w;67
b.GKeyholeMapMercSpec=D;68
b.GHybridMapSpec=M;69
b.GKatrinaMapSpec=J;70
if(window.createMapSpecs)71
{72
var c=window.createMapSpecs();73
b.G_MAP_TYPE=c[0];74
b.G_SATELLITE_TYPE=c[1];75
b.G_HYBRID_TYPE=c[2];76
b.G_KATRINA_TYPE=c[3]77
}78
else79
{80
b.G_MAP_TYPE=null;81
b.G_SATELLITE_TYPE=null;82
b.G_HYBRID_TYPE=null;83
b.G_KATRINA_TYPE=null84
}85
b.GDocumentTransport=Ca;86
b.GXmlHttp=Ja;87
b.GXml=ya;88
b.GXslt=O;89
b.GEvent=j;90
b.GTimer=R;91
b.GLog=z;92
b.GMakePasteBox=Bb93
}94
function nd(a,b,c)95
{96
var d=[];97
var e=[a];98
if(a=="https:")99
{100
e.unshift("http:") //shift:将指定的元素插入数组开始位置并返回该数组。101
}102
b=b.toLowerCase();103
var f=[b];104
var i=b.split(".");105
//下面的代码真的不知道在搞什么,如果存在www则删除,否则加上……,106
//对于www.step1.cn会得到step1.cn,如果对于mail.step1.cn却得到www.mail.step1.cn107
if(i[0]=="www")108
{109
i.shift() //shift:移除数组中的第一个元素并返回该元素。110
}111
else112
{113
i.unshift("www")114
}115
f.push(i.join("."));116
c=c.split("/");117
var g=[];118
while(c.length>1)119
{120
c.pop();121
g.push(c.join("/")+"/")122
}123
for(var h=0;h<e.length;++h)124
{125
for(var m=0;m<f.length;++m)126
{127
for(var o=0;o<g.length;++o)128
{129
d.push(e[h]+"//"+f[m]+g[o])130
}131
}132
}133
return d134
}135
//本代码是检测验证码的,很容易就可以看出,如果_apiHash没有设置,则自动跳过检测136
if(typeof _apiHash!="undefined")137
{138
var ed=_apiHash;139
var Fb=nd(window.location.protocol,window.location.host,window.location.pathname);140
var Db=false;141
for(var Wa=0;Wa<Fb.length;++Wa)142
{143
var ld=Fb[Wa];144
var md=kd(ld);145
if(ed==md)146
{147
Ab(); //初始化地图设置,执行这个之后就可以使用地图对象了148
Db=true;149
break150
}151
}152
if(!Db)153
{154
_c=false;155
alert(_mApiBadKey)156
}157
}158
else159
{160
Ab()161
};posted on 2005-10-13 17:59 K_Reverter 阅读(745) 评论(0) 收藏 举报

浙公网安备 33010602011771号