在调用钉钉JSAPI之前如何先判断当前应用是否在钉钉容器中打开
程序员文章站
2024-01-22 12:17:40
...
问题背景
在开发钉钉应用时,如果是基于H5应用开发的话,我们有时为了方便调试(比如为了方便查看js的执行日志,这时通常是在浏览器中进行查看和调试)不一定在钉钉中进行调试,这种情况在调用钉钉的JSAPI时就会报错Do not support the current environment:notInDingTalk,如下图:
这中错误即影响对日志的分析,又影响心情,必须除之。
问题解决
解决的办法就是在调用钉钉JSAPI之前先判断一下应用是否在钉钉容器中访问就可。
原程序代码如下:
import { Component } from '@angular/core';
import * as dd from 'dingtalk-jsapi';
@Component({
selector: 'app-tab1',
templateUrl: 'tab1.page.html',
styleUrls: ['tab1.page.scss']
})
export class Tab1Page {
code: any = '';
constructor() {
dd.ready(()=>{
dd.runtime.permission.requestAuthCode({corpId: '您企业钉钉的corpId'}).then((result) => {
this.code = result.code;
}).catch(err => {
console.log(err);
alert(err);
});
});
}
}
增加判断的关键代码是判断dd.env.platform的值是否是notInDingTalk,修改后的代码如下:
import { Component } from '@angular/core';
import * as dd from 'dingtalk-jsapi';
@Component({
selector: 'app-tab1',
templateUrl: 'tab1.page.html',
styleUrls: ['tab1.page.scss']
})
export class Tab1Page {
code: any = '';
constructor() {
// 先判断是否是在钉钉中运行此应用
if (dd.env.platform != 'notInDingTalk') {
dd.ready(()=>{
dd.runtime.permission.requestAuthCode({corpId: 'ding288e6c6c4c5a33ee35c2f4657eb6378f'}).then((result) => {
this.code = result.code;
}).catch(err => {
console.log(err);
alert(err);
});
});
} else {
console.warn('请在钉钉中访问本应用!');
}
}
}
这样修改以后就不会在日志中报异常了~~
钉钉中的运行效果如下图: