geo-for-http
Version:
a small tool to getCurrentPosition in http protocol
2 lines • 5.56 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:true});var _bluebird=require("bluebird");var _bluebird2=_interopRequireDefault(_bluebird);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var geo={register:register,getCurrentPosition:getCurrentPosition};var DEFAULT_APP_NAME="yourappname"+ +new Date;var DEFAULT_APP_KEY="yourkey";var MAP_TYPES={HTML5:{type:"h5",map_js_url:"",app_key:DEFAULT_APP_KEY,app_name:DEFAULT_APP_NAME},QQMAP:{type:"qq",app_key:"OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77",app_name:DEFAULT_APP_NAME},BMAP:{type:"baidu",app_key:DEFAULT_APP_KEY,app_name:DEFAULT_APP_NAME},AMAP:{type:"ali",app_key:DEFAULT_APP_KEY,app_name:DEFAULT_APP_NAME},GMAP:{type:"google",app_key:DEFAULT_APP_KEY,app_name:DEFAULT_APP_NAME}};var ERROR_TYPE={1:"PERMISSION_DENIED",2:"POSITION_UNAVAILABLE",3:"TIMEOUT"};var util={isHttps:window.location.protocol==="https:",isSupportGeo:!!window.navigator.geolocation,isObject:function isObject(obj){return Object.prototype.toString.call(obj)==="[object Object]"},isFunction:function isFunction(obj){return Object.prototype.toString.call(obj)==="[object Function]"}};var cacheURL=[];function register(){var appInfo=arguments.length>0&&arguments[0]!==undefined?arguments[0]:MAP_TYPES.QQMAP;var mapKeys=Object.keys(MAP_TYPES);var targetMap=mapKeys.filter(function(item,index){return MAP_TYPES[item].type===appInfo.type})[0];MAP_TYPES[targetMap]={type:appInfo.type,app_key:appInfo.app_key,app_name:appInfo.app_name}}function getCurrentPosition(){var mapType=arguments.length>0&&arguments[0]!==undefined?arguments[0]:MAP_TYPES.QQMAP.type;var posOptions=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};if(util.isObject(mapType)){posOptions=mapType;mapType=MAP_TYPES.QQMAP.type}return new _bluebird2.default(function(resolve,reject){if(util.isSupportGeo){if(mapType===MAP_TYPES.HTML5.type){_H5Location(successFn,errorFn,posOptions)}else{_useMapLocation(successFn,errorFn,posOptions,mapType)}}else{_useMapLocation(successFn,errorFn,posOptions,mapType)}function successFn(pos){var position={};if(pos.coords){position={lat:pos.coords.latitude,lng:pos.coords.longitude,maptype:MAP_TYPES.HTML5.type}}else if(pos.point){position={lat:pos.point.lat,lng:pos.point.lng,maptype:MAP_TYPES.BMAP.type}}else if(pos.position){position={lat:pos.position.lat,lng:pos.position.lng,maptype:MAP_TYPES.AMAP.type}}else{position={lat:pos.lat,lng:pos.lng,maptype:MAP_TYPES.QQMAP.type}}resolve(position)}function errorFn(err){if(err&&err.code){console.error("Error: Failed when call navigator.geolocation.getCurrentPosition() . (ERROR_CODE:"+err.code+", ERROR_TYPE:"+ERROR_TYPE[err.code]+", ERROR_MESSAGE:"+err.message+")")}reject(err)}})}function _useMapLocation(successFn,errorFn,posOptions,mapType){switch(mapType){case MAP_TYPES.AMAP.type:_AMapLocation(successFn,errorFn,posOptions);break;case MAP_TYPES.BMAP.type:_BMapLocation(successFn,errorFn,posOptions);break;case MAP_TYPES.QQMAP.type:_QQMapLocation(successFn,errorFn,posOptions);break}}function _H5Location(successFn,errorFn,posOptions){window.navigator.geolocation.getCurrentPosition(successFn,errorFn,posOptions)}function _AMapLocation(successFn,errorFn,posOptions){_getScript("//webapi.amap.com/maps?v=1.3&key="+MAP_TYPES.AMAP.app_key).then(function(){var aMapWrapId="geo-everywhere-amap";var map=void 0,geolocation=void 0;createAMap(function(){map=new window.AMap.Map(aMapWrapId);map.plugin("AMap.Geolocation",function(){geolocation=new window.AMap.Geolocation({});geolocation.getCurrentPosition(onComplete)});function onComplete(status,result){if(status==="complete"){successFn(result)}else{errorFn(status)}}});function createAMap(next){var container=document.createElement("div");container.id=aMapWrapId;container.style.display="none";document.body.appendChild(container);util.isFunction(next)&&next()}})}function _BMapLocation(successFn,errorFn,posOptions){_getScript("//api.map.baidu.com/getscript?v=2.0&ak="+MAP_TYPES.BMAP.app_key+"&services=&t="+ +new Date).then(function(){var geolocation=new window.BMap.Geolocation;geolocation.getCurrentPosition(function(pos){if(this.getStatus()===window.BMAP_STATUS_SUCCESS){successFn(pos)}else{errorFn(this.getStatus())}},posOptions)})}function _QQMapLocation(successFn,errorFn,posOptions){_getScript("//apis.map.qq.com/tools/geolocation/min?key="+MAP_TYPES.QQMAP.app_key+"&referer="+MAP_TYPES.QQMAP.app_name).then(function(){var geolocation=new window.qq.maps.Geolocation(MAP_TYPES.QQMAP.app_key,MAP_TYPES.QQMAP.app_name);geolocation.getLocation(successFn,errorFn,posOptions)})}function _getScript(mapJsUrl){return new _bluebird2.default(function(resolve,reject){var _iteratorNormalCompletion=true;var _didIteratorError=false;var _iteratorError=undefined;try{for(var _iterator=cacheURL[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var url=_step.value;if(url===mapJsUrl){resolve();return false}}}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}}var sc=document.createElement("script");sc.type="text/javascript";sc.src=mapJsUrl;sc.onload=sc.onreadystatechange=function(){if(!this.readyState||/^(loaded|complete)$/.test(this.readyState)){resolve();sc.onload=sc.onreadystatechange=null;cacheURL.push(mapJsUrl)}};sc.onerror=function(err){reject(err);sc.onerror=null};document.body.appendChild(sc)})}exports.default=geo;module.exports=geo;
//# sourceMappingURL=./lib/geo.min.js.map