@vuemap/amap-jsapi-loader
Version:
高德官网提供的地图JSAPI加载器,可以避免多种异步加载API的错误用法
16 lines (15 loc) • 5.76 kB
JavaScript
var LoadStatus;(function(a){a.notload="notload";a.loading="loading";a.loaded="loaded";a.failed="failed"})(LoadStatus||(LoadStatus={}));let config={key:"",AMap:{version:"1.4.15",plugins:[]},AMapUI:{version:"1.1",plugins:[]},Loca:{version:"1.3.2"}},Status={AMap:LoadStatus.notload,AMapUI:LoadStatus.notload,Loca:LoadStatus.notload},Callback={AMap:[],AMapUI:[],Loca:[]},onloadCBKs=[],onload=function(a){"function"==typeof a&&(Status.AMap===LoadStatus.loaded?a(window.AMap):onloadCBKs.push(a))};
function appendOther(a){let e=[];a.AMapUI&&e.push(loadAMapUI(a.AMapUI));a.Loca&&e.push(loadLoca(a.Loca));return Promise.all(e)}
function loadAMapUI(a){return new Promise((e,b)=>{let d=[];if(a.plugins)for(var c=0;c<a.plugins.length;c+=1)-1==config.AMapUI.plugins.indexOf(a.plugins[c])&&d.push(a.plugins[c]);if(Status.AMapUI===LoadStatus.failed)b("\u524d\u6b21\u8bf7\u6c42 AMapUI \u5931\u8d25");else if(Status.AMapUI===LoadStatus.notload){Status.AMapUI=LoadStatus.loading;config.AMapUI.version=a.version||config.AMapUI.version;c=config.AMapUI.version;let f=document.body||document.head,g=document.createElement("script");g.type="text/javascript";
g.src=`https://webapi.amap.com/ui/${c}/main.js`;g.onerror=a=>{Status.AMapUI=LoadStatus.failed;b("\u8bf7\u6c42 AMapUI \u5931\u8d25")};g.onload=()=>{Status.AMapUI=LoadStatus.loaded;if(d.length)window.AMapUI.loadUI(d,function(){for(let a=0,b=d.length;a<b;a++){let b=d[a].split("/").slice(-1)[0];window.AMapUI[b]=arguments[a]}for(e();Callback.AMapUI.length;)Callback.AMapUI.splice(0,1)[0]()});else for(e();Callback.AMapUI.length;)Callback.AMapUI.splice(0,1)[0]()};f.appendChild(g)}else Status.AMapUI===LoadStatus.loaded?
a.version&&a.version!==config.AMapUI.version?b("\u4e0d\u5141\u8bb8\u591a\u4e2a\u7248\u672c AMapUI \u6df7\u7528"):d.length?window.AMapUI.loadUI(d,function(){for(let a=0,b=d.length;a<b;a++){let b=d[a].split("/").slice(-1)[0];window.AMapUI[b]=arguments[a]}e()}):e():a.version&&a.version!==config.AMapUI.version?b("\u4e0d\u5141\u8bb8\u591a\u4e2a\u7248\u672c AMapUI \u6df7\u7528"):Callback.AMapUI.push(a=>{a?b(a):d.length?window.AMapUI.loadUI(d,function(){for(let a=0,b=d.length;a<b;a++){let b=d[a].split("/").slice(-1)[0];
window.AMapUI[b]=arguments[a]}e()}):e()})})}
function loadLoca(a){return new Promise((e,b)=>{if(Status.Loca===LoadStatus.failed)b("\u524d\u6b21\u8bf7\u6c42 Loca \u5931\u8d25");else if(Status.Loca===LoadStatus.notload){Status.Loca=LoadStatus.loading;config.Loca.version=a.version||config.Loca.version;let g=config.Loca.version;var d=config.AMap.version.startsWith("2"),c=g.startsWith("2");if(d&&!c||!d&&c)b("JSAPI \u4e0e Loca \u7248\u672c\u4e0d\u5bf9\u5e94\uff01\uff01");else{d=config.key;c=document.body||document.head;var f=document.createElement("script");
f.type="text/javascript";f.src=`https://webapi.amap.com/loca?v=${g}&key=${d}`;f.onerror=a=>{Status.Loca=LoadStatus.failed;b("\u8bf7\u6c42 AMapUI \u5931\u8d25")};f.onload=()=>{Status.Loca=LoadStatus.loaded;for(e();Callback.Loca.length;)Callback.Loca.splice(0,1)[0]()};c.appendChild(f)}}else Status.Loca===LoadStatus.loaded?a.version&&a.version!==config.Loca.version?b("\u4e0d\u5141\u8bb8\u591a\u4e2a\u7248\u672c Loca \u6df7\u7528"):e():a.version&&a.version!==config.Loca.version?b("\u4e0d\u5141\u8bb8\u591a\u4e2a\u7248\u672c Loca \u6df7\u7528"):
Callback.Loca.push(a=>{a?b(a):b()})})}
let load=function(a){if("undefined"===typeof window)throw Error("AMap JSAPI can only be used in Browser.");return new Promise((e,b)=>{if(Status.AMap==LoadStatus.failed)b("");else if(Status.AMap==LoadStatus.notload){let {key:g,version:f,plugins:h}=a;if(g){window.AMap&&"lbs.amap.com"!==location.host&&b("\u7981\u6b62\u591a\u79cdAPI\u52a0\u8f7d\u65b9\u5f0f\u6df7\u7528");config.key=g;config.AMap.version=f||config.AMap.version;config.AMap.plugins=h||config.AMap.plugins;Status.AMap=LoadStatus.loading;var d=
document.body||document.head;window.___onAPILoaded=function(c){delete window.___onAPILoaded;if(c)Status.AMap=LoadStatus.failed,b(c);else for(Status.AMap=LoadStatus.loaded,appendOther(a).then(()=>{e(window.AMap)}).catch(b);onloadCBKs.length;)onloadCBKs.splice(0,1)[0]()};var c=document.createElement("script");c.type="text/javascript";c.src="https://webapi.amap.com/maps?callback=___onAPILoaded&v="+config.AMap.version+"&key="+g+"&plugin="+config.AMap.plugins.join(",");c.onerror=a=>{Status.AMap=LoadStatus.failed;
b(a)};d.appendChild(c)}else b("\u8bf7\u586b\u5199key")}else if(Status.AMap==LoadStatus.loaded)if(a.key&&a.key!==config.key)b("\u591a\u4e2a\u4e0d\u4e00\u81f4\u7684 key");else if(a.version&&a.version!==config.AMap.version)b("\u4e0d\u5141\u8bb8\u591a\u4e2a\u7248\u672c JSAPI \u6df7\u7528");else{d=[];if(a.plugins)for(c=0;c<a.plugins.length;c+=1)-1==config.AMap.plugins.indexOf(a.plugins[c])&&d.push(a.plugins[c]);d.length?window.AMap.plugin(d,()=>{appendOther(a).then(()=>{e(window.AMap)}).catch(b)}):appendOther(a).then(()=>
{e(window.AMap)}).catch(b)}else if(a.key&&a.key!==config.key)b("\u591a\u4e2a\u4e0d\u4e00\u81f4\u7684 key");else if(a.version&&a.version!==config.AMap.version)b("\u4e0d\u5141\u8bb8\u591a\u4e2a\u7248\u672c JSAPI \u6df7\u7528");else{var f=[];if(a.plugins)for(c=0;c<a.plugins.length;c+=1)-1==config.AMap.plugins.indexOf(a.plugins[c])&&f.push(a.plugins[c]);onload(()=>{f.length?window.AMap.plugin(f,()=>{appendOther(a).then(()=>{e(window.AMap)}).catch(b)}):appendOther(a).then(()=>{e(window.AMap)}).catch(b)})}})};
function reset(){delete window.AMap;delete window.AMapUI;delete window.Loca;config={key:"",AMap:{version:"1.4.15",plugins:[]},AMapUI:{version:"1.1",plugins:[]},Loca:{version:"1.3.2"}};Status={AMap:LoadStatus.notload,AMapUI:LoadStatus.notload,Loca:LoadStatus.notload};Callback={AMap:[],AMapUI:[],Loca:[]}}var index={load,reset};module.exports=index
//# sourceMappingURL=index.cjs.map
;