key: 'positionData',
data: position
})
success(position)
}
// 定位失败回调
const showErr = (err) =>
// 如果获取定位失败超过3次 抛出错误 否则继续获取定位信息
if (this.getPositionCount > 3) {
fail('超过3次 获取定位失败')
} else {
// 定位失败递归
_self.getPositionCount = _self.getPositionCount + 1
_self.getTMapLocation(success, fail)
}
}
// 调用腾讯web定位组件获取位置信息
if (geolocation) {
geolocation.getIpLocation(showPosition, showErr, {
timeout: 6000, // 定位超时时长 单位ms
failTipFlag: true
})
}
}
}
export default new TMap()
2. 在微信 webview 中, 通过微信sdk获取位置信息
2.1 微信 js-sdk 相关的准备工作
2.1.1 引入js文件
/**
* 微信sdk异步加载
* @param {*} src
* @param {*} callback api接口
*/
export const handlerLoadScript = callback => {
const src = `https://res.wx.qq.com/open/js/jweixin-1.4.0.js`
if (!(typeof callback === 'function')) {
callback = function() {}
}
var check = document.querySelectorAll(`script[src="${src}"]`)
if (check.length > 0) {
check[0].addEventListener('load', function() {
callback()
})
callback()
return
}
var script = document.createElement('script')
var head = document.getElementsByTagName('head')[0]script.type = 'text/javascript'
script.charset = 'UTF-8'
script.src = src
if (script.addEventListener) {
script.addEventListener(
'load',
function() {
callback()
},
false
)
} else if (script.attachEvent) {
script.attachEvent('onreadystatechange', function() {
var target = window.event.srcElement
if (target.readyState === 'loaded') {
callback()
}
})
}
head.appendChild(script)
}
2.1.2 注入权限验证配置
所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用。通常是通过后台接口获取配置信息。
/**
* 注入权限验证配置
* @param {object} 微信 js-sdk 权限验证配置
*/
export const wxconfigInfo = config => {
wx.config({
debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: config.appId,
timestamp: parseInt(config.timestamp),
nonceStr: config.nonceStr,
signature: config.signature,
jsApiList: [ // 需要使用的 jsapi 列表
...,
'getLocation' // 获取地理位置
]})
}2.2 调用 api 获取位置信息
/**
* 微信获取位置









