欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

在调用钉钉JSAPI之前如何先判断当前应用是否在钉钉容器中打开

程序员文章站 2024-01-22 12:17:40
...

在调用钉钉JSAPI之前如何先判断当前应用是否在钉钉容器中打开

问题背景

在开发钉钉应用时,如果是基于H5应用开发的话,我们有时为了方便调试(比如为了方便查看js的执行日志,这时通常是在浏览器中进行查看和调试)不一定在钉钉中进行调试,这种情况在调用钉钉的JSAPI时就会报错Do not support the current environment:notInDingTalk,如下图:
在调用钉钉JSAPI之前如何先判断当前应用是否在钉钉容器中打开
这中错误即影响对日志的分析,又影响心情,必须除之。

问题解决

解决的办法就是在调用钉钉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('请在钉钉中访问本应用!');
    }
  }
}

这样修改以后就不会在日志中报异常了~~
钉钉中的运行效果如下图:
在调用钉钉JSAPI之前如何先判断当前应用是否在钉钉容器中打开

相关标签: h5 App