搜了一圈没有找到相关资料,官网文档JSAPI Explorer扫描二维码可以调通,但是自己编写就不可以。
怀疑是使用uniapp的问题,然后重新使用原生框架创建了一个钉钉项目,也是不行。
询问客服,ai答非所问,加群咨询也是无解。
看官网文档小程序是支持的,但是在小程序中打印dd对象,里面对于位置(locat)关键字的方法只有两个。没有locateInMap。
很奇怪,断断续续继续研究调试,怀疑版本号的问题也是无果,最后看到了这个文档恍然大悟:https://open.dingtalk.com/document/isvapp/mini-app-programs-use-the-h5-micro-application-jsapi
里面是这么描述的:
本文档介绍在钉钉小程序内,如何调用钉钉H5微应用的JSAPI。
由于小程序的JSAPI框架继承了H5的所有native plugin,所以基于dingtalk-jsapi框架的JSAPI在小程序内也可以使用。
根据描述看小程序的方法是不完全的,还需要引入H5的方法。
至此困扰了好久的一个问题解决了。不找到这个文档,真不知道还要引入H5的jsapi。
引入方法
文中以uniapp为例
- 项目跟目录创建
node_modules
文件夹 - 命令行进入文件夹,运行
npm install dingtalk-jsapi --save
App.vue
文件script标签内顶部添加import 'dingtalk-jsapi/entry/mobile';
<script>
import 'dingtalk-jsapi/entry/mobile';
export default {
onLaunch: function() {
console.log('App Launch')
},
onShow: function() {
console.log('App Show')
},
onHide: function() {
console.log('App Hide')
}
}
</script>
<style>
/*每个页面公共css */
</style>
- 使用某个方法,以
locateInMap
为例,vue3<script setup>
标签内引入对应js, 直接使用方法即可。
import locateInMap from 'dingtalk-jsapi/api/biz/map/locate.js';
locateInMap({
scope: 500,
success: (res) => {
console.log(res)
const {
snippet,
adName,
distance,
province,
city,
cityCode,
provinceCode,
adCode,
latitude,
postCode,
title,
longitude,
} = res;
formParams.endAddress = `${province}${city}${adName}${title}`
},
fail: (err) => {
console.log('locateInMap失败', err)
},
complete: () => {},
});