
# 变更记录
| 产品版本 | 更新内容 | 更新日期 |
| --- | --- | --- |
| V6.0.0 | 优化了扩展JS中引入第三方文件的方式,支持相对路径引用 | 2023-10-18 |

之前带大家学习了[《如何调用扫码、拍照等移动客户端的API?》](https://vip.kingdee.com/article/168047584139834112)一文,文中给大家介绍了苍穹平台目前已经集成的一些常用办公APP的能力(包括云之家、企业微信、钉钉和welink)。
不过也有很多用户不是使用这些APP,那么我们要怎么在苍穹未集成的APP里实现自己的需求呢?
苍穹平台为此提供了前端扩展JS的能力,不仅可以扩展在移动端app的能力,pc端也可以用哦~
这篇文章将给大家揭秘~
本文列举了两个关于扩展JS的使用场景(移动端和pc端各一个),希望对于大家有所启发,当前端标准功能不满足业务需求时,可以考虑使用扩展JS为前端赋能。
## 场景一
客户想在某个第三方APP中打开审批界面,在移动端审批完成之后,关闭苍穹界面,并刷新待办列表。
但是由于苍穹没有集成该APP关闭页面的API,这就需要二开处理下,在扩展JS里面实现一个关闭页面的方法,再调用APP的关闭API。
首先,我们需要先找一下该APP有没有关闭页面接口的相关文档,一般的APP官网或者开放平台都会有相关资料。如果是企业内部开发OA软件,可以找OA的开发人员咨询一下。
* 如果当前使用的APP功能比较完善,有对外开放的API,那我们就可以引用app的JS桥文件,然后调用其提供的关闭接口
扩展JS的代码如下:
```js
// index_m.js
(function () {
/**
* 自定义app插件入口
* @param {*} loadjs 加载app需要的js资源,可选
* @param {*} releaseResource 释放根页面资源,可选
* @param callback 插件安装回调,插件生效,最后必须调用:callback({success:true})
*/
window.initKDPlugin = function ({ loadjs, releaseResource }, callback) {
// loadjs的第一个参数是一个地址,需要根据实际情况进行修改(重要!),用于引用第三方JS桥文件
// JS桥文件是线上地址时,可以直接作为第一个参数传递,比如“http://xxx.com/jssdk.js”
// 如果是本地文件,可以上传到跟index_m.js同级的目录,再通过./jsbridge.js相对路径引用
// 如果需要引用多个JS文件,可以传递一个数组,比如['./jssdk1.js', './jssdk2.js']
loadjs('./jsbridge.js', () => {
window.KDPlugin = {
closeWebView: function () {
try {
releaseResource()// 通知释放服务器页面资源
} catch (error) {
console.error('releaseResource', error)
}
// todo: 调用第三方的APP接口关闭当前网页窗口(重要!)
}
}
callback({ success: true })
})
}
})();
```
* 如果当前使用的app没有提供API,那也有办法解决:我们可以跳转到app的中间拦截页面,该中间页面会关闭当前浏览器窗口
扩展JS的代码如下:
```js
// index_m.js
(function () {
window.initKDPlugin = function ({ loadjs, releaseResource }, callback) {
window.KDPlugin = {
closeWebView: function () {
try {
releaseResource()// 通知释放服务器页面资源
} catch (error) {
console.error('releaseResource', error)
}
// todo: 跳转到中间拦截界面(重要!)
location.href = 'https://xxx.com/exit.do'
}
}
callback({ success: true })
}
})();
```
## 场景二
客户的苍穹系统集成了很多异构系统,基本上都是采用模拟登录的方式,有些加密方式需要一些参数,需要从后端数据库取数传过去。需要苍穹提供方法可以往前端localStorage中写数据,在异构系统中再去从localStorage中取数据。
这种场景就可以通过web端扩展JS来实现,扩展JS代码如下:
```js
// index.js
(function () {
/**二开扩展PC端js
* 注意:扩展的js默认是在平