K_Reverter的网页开发记录

要么不做,要么就当作艺术品来做!

导航

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    }
;

posted on 2005-10-13 17:59  K_Reverter  阅读(710)  评论(0编辑  收藏  举报