解决Vue引入百度地图JSSDK:BMap is undefined 问题

2018-01-13 11:01:56来源:http://www.huchiwei.com/2018/01/11/解决Vue引入百度地图JSSDK:BMap is 作者:huchiwei人点击

分享

百度地图官网文档介绍使用JSSDK时,仅提供了2种引入方式:


script引入
异步加载


但vue项目中仅某一两个页面需要用到百度地图,所以不想在index.html
中全局引用。


那在单个vue组件页面中如何引入呢?


刚开始时,是直接通过 DOM 操作方式插入script标签到当前document中,如下:


let scriptNode = document.createElement("script");
scriptNode.setAttribute("type", "text/javascript");
scriptNode.setAttribute("src", "/2014th7cj/d/file/p/20180113/api default {
init: function (){
const AK = "AK密钥";
const apiVersion = "3.0";
const timestamp = new Date().getTime();
const BMap_URL = "/2014th7cj/d/file/p/20180113/api apiVersion +"&ak="+ AK +"&services=&t=" + timestamp;
return new Promise((resolve, reject) => {
// 插入script脚本
let scriptNode = document.createElement("script");
scriptNode.setAttribute("type", "text/javascript");
scriptNode.setAttribute("src", BMap_URL);
document.body.appendChild(scriptNode);
// 等待页面加载完毕回调
window.onload = function (){
resolve(BMap)
}
});
}
}
// -------------------------
// vue引入调用
import BaiduMap from 'baidu-map';
...
mounted(){
BauduMap.init()
.then((BMap) => {
console.log(BMap)
console.log("加载成功...")
})
}
...
结果还是不行。

想了下原因,一、可能是vue中window.onload没有触发,二、百度地图JSSDK没有真正加载成功。


继续验证测试,发现window.onload能够正常触发,那就是JSSDK没有加载成功。



直接复制JSSDK URL浏览器中打开/2014th7cj/d/file/p/20180113/api
window.BMap_loadScriptTime = (new Date).getTime();
document.write('<script type="text/javascript" src="/2014th7cj/d/file/p/20180113/getscript default {
init: function (){
console.log("初始化百度地图脚本...");
const AK = "AK密钥";
const apiVersion = "3.0";
const timestamp = new Date().getTime();
const BMap_URL = "/2014th7cj/d/file/p/20180113/getscript apiVersion +"&ak="+ AK +"&services=&t=" + timestamp;
return new Promise((resolve, reject) => {
if(typeof BMap !== "undefined") {
resolve(BMap);
return true;
}
// 插入script脚本
let scriptNode = document.createElement("script");
scriptNode.setAttribute("type", "text/javascript");
scriptNode.setAttribute("src", BMap_URL);
document.body.appendChild(scriptNode);
// 等待页面加载完毕回调
let timeout = 0;
let interval = setInterval(()=> {
// 超时10秒加载失败
if(timeout >= 20) {
reject();
clearInterval(interval);
console.error("百度地图脚本初始化失败...");
}
// 加载成功
if(typeof BMap !== "undefined") {
resolve(BMap);
clearInterval(interval);
console.log("百度地图脚本初始化成功...");
}
timeout += 1;
}, 500);
});
}
}

问题到此就解决了,至于为什么用官网提供的地址没有真正加载到JSSDK这个问题有空再研究下。


最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台