对Google Maps API的JS文件解析(map.js)

        我下载了Google Maps API所调用的JS文件的源文件,研究了一下,做了一点注释,现在放在下面

  1None.gifvar _mSiteName =  'Google Maps';
  2None.gifvar _mZoomIn =  'Zoom In';
  3None.gifvar _mZoomOut =  'Zoom Out';
  4None.gifvar _mZoomSet =  'Click to set zoom level';
  5None.gifvar _mZoomDrag =  'Drag to zoom';
  6None.gifvar _mPanWest =  'Go left';
  7None.gifvar _mPanEast =  'Go right';
  8None.gifvar _mPanNorth =  'Go up';
  9None.gifvar _mPanSouth =  'Go down';
 10None.gifvar _mLastResult =  'Return to the last result';
 11None.gifvar _mGoogleCopy = '?2005  Google';
 12None.gifvar _mDataCopy = 'Map data ?2005  ';
 13None.gifvar _mNavteq = 'NAVTEQ? ';
 14None.gifvar _mTeleAtlas =  'Tele Atlas';
 15None.gifvar _mZenrin =  'ZENRIN';
 16None.gifvar _mZenrinCopy = 'Map ?2005  ';
 17None.gifvar _mNormalMap =  'Map';
 18None.gifvar _mNormalMapShort =  'Map';
 19None.gifvar _mHybridMap =  'Hybrid';
 20None.gifvar _mHybridMapShort =  'Hyb';
 21None.gifvar _mNew = 'New! ';
 22None.gifvar _mTerms =  'Terms of Use';
 23None.gifvar _mKeyholeMap =  'Satellite';
 24None.gifvar _mKeyholeMapShort =  'Sat';
 25None.gifvar _mKeyholeCopy = 'Imagery ?2005  ';
 26None.gifvar _mScale =  'Scale at the center of the map';
 27None.gifvar _mKilometers =  'km';
 28None.gifvar _mMiles =  'mi';
 29None.gifvar _mMeters =  'm';
 30None.gifvar _mFeet =  'ft';
 31None.gifvar _mDecimalPoint =  '.';
 32None.gifvar _mThousandsSeparator =  ',';
 33None.gifvar _mMapErrorTile = 'We are sorry, but we don\'t have maps at this zoom level for this region.Try zooming out for  a broader look.';
 34None.gifvar _mKeyholeErrorTile = 'We are sorry, but we don\'t have imagery at this zoom level for this region.Try zooming out for  a broader look.';
 35None.gifvar _mTermsURL = 'http://www.google.com/help/terms_local.html';
 36None.gifvar _apiHash =  '5f87579ff86792cf982d095a4228e3de6cdaf562';
 37None.gifvar _apiKey = 'ABQIAAAA7nPTPXCvzWYxyKdmbFQfTxRfh1ef- GeSz5gtCVpCKOPebNr1YhR23M_jRfeqAugNMsW3pZQJAwfCFw';
 38None.gifvar _mApiBadKey = 'The Google Maps API key used on this web site was registered for a different web site. You can generate a new key for this web site at http://www.google.com/apis/maps/.';
 39None.giffunction  createMapSpecs()
 40ExpandedBlockStart.gifContractedBlock.gifdot.gif {
 41InBlock.gif    var mt = '';
 42InBlock.gif    var tv = 'w2.5';
 43InBlock.gif    var apitv = 'w2.5';
 44InBlock.gif    var hmt = '';
 45InBlock.gif    var htv = 'w2t.1';
 46InBlock.gif    var apihtv = 'w2t.1';
 47InBlock.gif    var kmt = '';
 48InBlock.gif    var kdomain = 'google.com';
 49InBlock.gif    var ktv = '3';
 50InBlock.gif    var kdisable = false;
 51InBlock.gif    var khauth = 'fzwq2uohc9nRek9eHfZgC_oFXnYU9GSk3iYwgw';
 52InBlock.gif    var kjapandatumhack = true;
 53InBlock.gif    var hybrid = (htv != '');
 54InBlock.gif    if (!arguments.callee.mapSpecs)
 55ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
 56InBlock.gif        var mapSpecs = [];
 57InBlock.gif        var tileVersion = window._apiKey ? apitv : tv;
 58InBlock.gif        var hTileVersion = window._apiKey ? apihtv : htv;
 59InBlock.gif        var mapCopy = (tileVersion != tv) ? G_MAP_API_COPYRIGHTS :G_MAP_DEFAULT_COPYRIGHTS;
 60InBlock.gif        var hybridCopy = (hTileVersion != htv) ? G_MAP_API_COPYRIGHTS :G_MAP_DEFAULT_COPYRIGHTS;
 61InBlock.gif        _GOOGLE_MAP_TYPE = new _GoogleMapMercSpec(mt, tileVersion, mapCopy);
 62InBlock.gif        mapSpecs.push(_GOOGLE_MAP_TYPE);
 63InBlock.gif        if (!kdisable)
 64ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 65InBlock.gif            _SATELLITE_TYPE = new _KeyholeMapMercSpec(kmt, kdomain, ktv, khauth,kjapandatumhack);
 66InBlock.gif            mapSpecs.push(_SATELLITE_TYPE);
 67InBlock.gif            if (hybrid)
 68ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
 69InBlock.gif                _HYBRID_TYPE = new _HybridMapSpec(kmt, kdomain, ktv, khauth,kjapandatumhack, hmt, hTileVersion,hybridCopy);
 70InBlock.gif                mapSpecs.push(_HYBRID_TYPE);
 71ExpandedSubBlockEnd.gif            }

 72InBlock.gif            _KATRINA_TYPE = new _KatrinaMapSpec(kmt, kdomain, ktv, khauth);
 73InBlock.gif            mapSpecs.push(_KATRINA_TYPE);
 74ExpandedSubBlockEnd.gif        }

 75InBlock.gif        arguments.callee.mapSpecs = mapSpecs;
 76ExpandedSubBlockEnd.gif    }

 77InBlock.gif    return arguments.callee.mapSpecs;
 78ExpandedBlockEnd.gif}

 79None.gif//取得浏览器名称字符串
 80None.gifvar _u =  navigator.userAgent.toLowerCase();
 81None.gif//检查是否存在t子字符串
 82None.giffunction  _ua(t)
 83ExpandedBlockStart.gifContractedBlock.gifdot.gif {
 84InBlock.gif    return _u.indexOf(t) != -1;
 85ExpandedBlockEnd.gif}

 86None.gif//用t作前缀解析_u,取得_u后面的城市
 87None.giffunction  _uan(t)
 88ExpandedBlockStart.gifContractedBlock.gifdot.gif {
 89InBlock.gif    if(!window.RegExp)
 90ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
 91InBlock.gif        return 0;
 92ExpandedSubBlockEnd.gif    }

 93InBlock.gif    var r = new RegExp(t+'([0-9]*)');
 94InBlock.gif    var s = r.exec(_u);
 95InBlock.gif    var ret = 0;
 96InBlock.gif    if (s.length >= 2)
 97ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
 98InBlock.gif        ret = s[1];
 99ExpandedSubBlockEnd.gif    }

100InBlock.gif    return ret;
101ExpandedBlockEnd.gif}

102None.gif//是否支持ActiveX(使用Microsoft.XMLDOM)
103None.giffunction  _noActiveX()
104ExpandedBlockStart.gifContractedBlock.gifdot.gif {
105InBlock.gif    if(!_ua('msie') || !document.all || _ua('opera'))
106ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
107InBlock.gif        return false;
108ExpandedSubBlockEnd.gif    }

109InBlock.gif    var s = false;
110ExpandedSubBlockStart.gifContractedSubBlock.gif    eval('try dot.gifnew ActiveXObject("Microsoft.XMLDOM"); }'+'catch (e) dot.gif{ s = true; }');
111InBlock.gif    return s;
112ExpandedBlockEnd.gif}

113None.gif//检查浏览器名称是否正常
114None.giffunction  _compat()
115ExpandedBlockStart.gifContractedBlock.gifdot.gif {
116InBlock.gif    return ((_ua('opera') &&(_ua('opera 7.5') || _ua('opera/7.5') ||_ua('opera 8') || _ua('opera/8'))) ||(_ua('safari') && _uan('safari/') >= 125||(_ua('msie') &&!_ua('msie 4') && !_ua('msie 5.0') && !_ua('msie 5.1') &&!_ua('msie 3') && !_ua('powerpc')) ||(document.getElementById && window.XSLTProcessor &&window.XMLHttpRequest && !_ua('netscape6') &&!_ua('netscape/7.0')));
117ExpandedBlockEnd.gif}

118None.gif//这里也比较让人费解,_compat和_browserIsCompatible、GBrowserIsCompatible其实都差不多啊
119None.gif_fc = false ;
120None.gif_c = _fc ||  _compat();
121None.gif//返回浏览器兼容性,不知道为什么会有两个一样的函数
122None.giffunction  _browserIsCompatible()
123ExpandedBlockStart.gifContractedBlock.gifdot.gif {
124InBlock.gif    return _c;
125ExpandedBlockEnd.gif}

126None.giffunction  GBrowserIsCompatible()
127ExpandedBlockStart.gifContractedBlock.gifdot.gif {
128InBlock.gif    return _c;
129ExpandedBlockEnd.gif}

130None.gif//判断浏览器是否存在xslt解析
131None.giffunction  _havexslt()
132ExpandedBlockStart.gifContractedBlock.gifdot.gif {
133InBlock.gif    if (typeof GetObject != 'undefined' ||(typeof XMLHttpRequest != 'undefined' &&typeof DOMParser != 'undefined' &&typeof XSLTProcessor != 'undefined'))
134ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
135InBlock.gif        return true;
136ExpandedSubBlockEnd.gif    }

137InBlock.gif    else
138ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
139InBlock.gif        return false;
140ExpandedSubBlockEnd.gif    }

141ExpandedBlockEnd.gif}

142None.gif//载入一个JS文件
143None.giffunction  _script(src)
144ExpandedBlockStart.gifContractedBlock.gifdot.gif {
145InBlock.gif    var ret='<'+'script src="'+src+'"'+' type="text/javascript"><'+'/script>';
146InBlock.gif    document.write(ret);
147ExpandedBlockEnd.gif}

148None.gif//根据浏览器兼容性情况加载不同的JS文件
149None.giffunction  _loadMapsScript()
150ExpandedBlockStart.gifContractedBlock.gifdot.gif {
151InBlock.gif    if(_havexslt())
152ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
153InBlock.gif        _script("http://maps.google.com/mapfiles/maps.21.js");
154ExpandedSubBlockEnd.gif    }

155InBlock.gif    else if(_ua('safari'))
156ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
157InBlock.gif        _script("http://maps.google.com/mapfiles/maps.21.safari.js");
158ExpandedSubBlockEnd.gif    }

159InBlock.gif    else
160ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
161InBlock.gif        _script("http://maps.google.com/mapfiles/maps.21.xslt.js");
162ExpandedSubBlockEnd.gif    }

163ExpandedBlockEnd.gif}

164None.gif//如果浏览器兼容并支持ActiveX,则加载JS文件
165None.gifif (_c && ! _noActiveX())
166ExpandedBlockStart.gifContractedBlock.gifdot.gif {
167InBlock.gif    document.write('');
168InBlock.gif    document.write('');
169InBlock.gif    _loadMapsScript();
170ExpandedBlockEnd.gif}

171None.gif
        很明显,其实这些只是一些基本的浏览器检测函数,而最重要的内容都在第149行的函数_loadMapsScript加载的函数文件里面,而这几个文件都特别大,我正准备以后进行分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值