@kbapp/js-bridge 1.0.15-alpha.0 → 1.0.17-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.MD +1331 -0
- package/dist/es/lib/bridge-code.js +12 -2
- package/dist/es/lib/save-image-to-local.js +27 -8
- package/dist/types/lib/bridge-code.d.ts +5 -0
- package/dist/types/lib/save-image-to-local.d.ts +10 -6
- package/dist/umd/index.js +2 -2
- package/docs/api/save-image-to-local.md +14 -6
- package/package.json +1 -1
- package/README.md +0 -108
|
@@ -2,6 +2,16 @@ const r = class r {
|
|
|
2
2
|
constructor(s) {
|
|
3
3
|
this.errorCode = s.errorCode, this.errorMsg = s.errorMsg;
|
|
4
4
|
}
|
|
5
|
+
/**
|
|
6
|
+
*
|
|
7
|
+
* @description 自定义业务错误
|
|
8
|
+
*/
|
|
9
|
+
static createBusinessError(s) {
|
|
10
|
+
return new r({
|
|
11
|
+
errorCode: 1004,
|
|
12
|
+
errorMsg: s
|
|
13
|
+
});
|
|
14
|
+
}
|
|
5
15
|
};
|
|
6
16
|
r.UNKNOWN = new r({
|
|
7
17
|
errorCode: 1e3,
|
|
@@ -16,7 +26,7 @@ r.UNKNOWN = new r({
|
|
|
16
26
|
errorCode: 1003,
|
|
17
27
|
errorMsg: "请在开吧app内执行"
|
|
18
28
|
});
|
|
19
|
-
let
|
|
29
|
+
let e = r;
|
|
20
30
|
export {
|
|
21
|
-
|
|
31
|
+
e as BridgeCode
|
|
22
32
|
};
|
|
@@ -1,16 +1,35 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
var n = (r, a, o) => new Promise((c, s) => {
|
|
2
|
+
var p = (e) => {
|
|
3
|
+
try {
|
|
4
|
+
m(o.next(e));
|
|
5
|
+
} catch (i) {
|
|
6
|
+
s(i);
|
|
7
|
+
}
|
|
8
|
+
}, t = (e) => {
|
|
9
|
+
try {
|
|
10
|
+
m(o.throw(e));
|
|
11
|
+
} catch (i) {
|
|
12
|
+
s(i);
|
|
13
|
+
}
|
|
14
|
+
}, m = (e) => e.done ? c(e.value) : Promise.resolve(e.value).then(p, t);
|
|
15
|
+
m((o = o.apply(r, a)).next());
|
|
16
|
+
});
|
|
17
|
+
import { runBridgeApi as g } from "../core/index.js";
|
|
18
|
+
import { wrapAsync as d } from "../utils/wrap-async.js";
|
|
19
|
+
import { BridgeCode as u } from "./bridge-code.js";
|
|
20
|
+
const B = d(
|
|
21
|
+
(r) => n(void 0, null, function* () {
|
|
22
|
+
if (!r.imageUrl && !r.encodedImage)
|
|
23
|
+
return Promise.reject(u.createBusinessError("imageUrl or encodedImage is required"));
|
|
24
|
+
g({
|
|
6
25
|
name: "OpenActRequest",
|
|
7
26
|
params: {
|
|
8
27
|
type: 62,
|
|
9
|
-
data:
|
|
28
|
+
data: r
|
|
10
29
|
}
|
|
11
30
|
});
|
|
12
|
-
}
|
|
31
|
+
})
|
|
13
32
|
);
|
|
14
33
|
export {
|
|
15
|
-
|
|
34
|
+
B as saveImageToLocal
|
|
16
35
|
};
|
|
@@ -11,4 +11,9 @@ export declare class BridgeCode {
|
|
|
11
11
|
static UNSUPPORTED_VERSION: BridgeCode;
|
|
12
12
|
static TIMEOUT: BridgeCode;
|
|
13
13
|
static UNSUPPORTED_BRIDGE_ENV: BridgeCode;
|
|
14
|
+
/**
|
|
15
|
+
*
|
|
16
|
+
* @description 自定义业务错误
|
|
17
|
+
*/
|
|
18
|
+
static createBusinessError(message: string): BridgeCode;
|
|
14
19
|
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { BridgeCode } from './bridge-code';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
*
|
|
3
5
|
* @description 保存图片到本地
|
|
@@ -12,11 +14,13 @@ saveImageToLocal({
|
|
|
12
14
|
```
|
|
13
15
|
*
|
|
14
16
|
*/
|
|
15
|
-
export declare const saveImageToLocal: (params
|
|
16
|
-
/** 图片url(
|
|
17
|
-
imageUrl
|
|
17
|
+
export declare const saveImageToLocal: (params?: ({
|
|
18
|
+
/** 图片url(网络地址) imageUrl|encodedImage 二选一 */
|
|
19
|
+
imageUrl?: string;
|
|
20
|
+
/** 图片base64 imageBase64|encodedImage 二选一 */
|
|
21
|
+
encodedImage?: string;
|
|
18
22
|
} & {
|
|
19
|
-
success?: ((res:
|
|
20
|
-
fail?: (error:
|
|
23
|
+
success?: ((res: undefined) => void) | undefined;
|
|
24
|
+
fail?: (error: BridgeCode) => void;
|
|
21
25
|
complete?: () => void;
|
|
22
|
-
}) => Promise<
|
|
26
|
+
}) | undefined) => Promise<undefined>;
|
package/dist/umd/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(function(t,l){typeof exports=="object"&&typeof module!="undefined"?l(exports):typeof define=="function"&&define.amd?define(["exports"],l):(t=typeof globalThis!="undefined"?globalThis:t||self,l(t.kbBridge={}))})(this,function(t){"use strict";var Ee=Object.defineProperty;var b=Object.getOwnPropertySymbols;var Q=Object.prototype.hasOwnProperty,G=Object.prototype.propertyIsEnumerable;var W=(t,l,c)=>l in t?Ee(t,l,{enumerable:!0,configurable:!0,writable:!0,value:c}):t[l]=c,K=(t,l)=>{for(var c in l||(l={}))Q.call(l,c)&&W(t,c,l[c]);if(b)for(var c of b(l))G.call(l,c)&&W(t,c,l[c]);return t};var
|
|
2
|
-
`||f==="\r"?f:f===" "?"\\t":""})):u=
|
|
1
|
+
(function(t,l){typeof exports=="object"&&typeof module!="undefined"?l(exports):typeof define=="function"&&define.amd?define(["exports"],l):(t=typeof globalThis!="undefined"?globalThis:t||self,l(t.kbBridge={}))})(this,function(t){"use strict";var Ee=Object.defineProperty;var b=Object.getOwnPropertySymbols;var Q=Object.prototype.hasOwnProperty,G=Object.prototype.propertyIsEnumerable;var W=(t,l,c)=>l in t?Ee(t,l,{enumerable:!0,configurable:!0,writable:!0,value:c}):t[l]=c,K=(t,l)=>{for(var c in l||(l={}))Q.call(l,c)&&W(t,c,l[c]);if(b)for(var c of b(l))G.call(l,c)&&W(t,c,l[c]);return t};var m=(t,l)=>{var c={};for(var h in t)Q.call(t,h)&&l.indexOf(h)<0&&(c[h]=t[h]);if(t!=null&&b)for(var h of b(t))l.indexOf(h)<0&&G.call(t,h)&&(c[h]=t[h]);return c};var A=(t,l,c)=>new Promise((h,_)=>{var R=d=>{try{p(c.next(d))}catch(E){_(E)}},y=d=>{try{p(c.throw(d))}catch(E){_(E)}},p=d=>d.done?h(d.value):Promise.resolve(d.value).then(R,y);p((c=c.apply(t,l)).next())});var L;function l(e){if(Object.prototype.toString.call(e)!=="[object Object]")return e;const n={};return Object.keys(e).forEach(r=>{const a=e[r];a!=null&&(n[r]=Object.prototype.toString.call(a)==="[object Object]"?l(a):a)}),n}const w=class w{constructor(n){this.errorCode=n.errorCode,this.errorMsg=n.errorMsg}static createBusinessError(n){return new w({errorCode:1004,errorMsg:n})}};w.UNKNOWN=new w({errorCode:1e3,errorMsg:"未知错误"}),w.UNSUPPORTED_VERSION=new w({errorCode:1001,errorMsg:"当前开吧版本不支持"}),w.TIMEOUT=new w({errorCode:1002,errorMsg:"执行超时"}),w.UNSUPPORTED_BRIDGE_ENV=new w({errorCode:1003,errorMsg:"请在开吧app内执行"});let c=w;const h=()=>{const e=(o,s,i)=>{var u="";typeof s=="function"&&(i=s,s={});var f={data:s===void 0?null:s};if(typeof i=="function"){var g="dscb"+window.dscb++;window[g]=i,f._dscbstub=g}if(f=JSON.stringify(f),window.flutter_inappwebview?window.flutter_inappwebview.callHandler&&(u=window.flutter_inappwebview.callHandler(""+o,f)):(window._dswk||navigator.userAgent.indexOf("_dsbridge")!=-1)&&(u=prompt("_flutterDsbridge="+o,f)),u instanceof Promise)return u;try{return JSON.parse(u||"{}").data}catch(S){console.error("callHandle异常,JSON.parse错误")}},n=()=>window.navigator.userAgent.includes("Android")?window.flutter_inappwebview&&window.flutter_inappwebview._platformReady:!0,r=(()=>{const o=[],s=setInterval(()=>{n()&&(clearInterval(s),o.forEach(i=>{e.apply(window,i)}),o.length=0)},500);return(...i)=>{o.push(i)}})();var a={default:void 0,callHandler:function(o,s,i){return n()?e(o,s,i):r(o,s,i)},register:function(o,s,i){var u=i?window._dsaf:window._dsf;window._dsInit||(window._dsInit=!0,setTimeout(function(){a.callHandler("_dsb.dsinit")},0)),typeof s=="object"?u._obs[o]=s:u[o]=s},registerHandler:function(o,s){this.register(o,s,!0)}};return function(){if(!window._dsf){var o={_dsf:{_obs:{}},_dsaf:{_obs:{}},dscb:0,jsBridge:a,_handleMessageFromNative:function(i){var u=JSON.parse(i.data),f={id:i.callbackId,complete:!0},g=this._dsf[i.method],S=this._dsaf[i.method],H=function(N,M){f.data=N.apply(M,u),a.callHandler("_dsb.returnValue",f)},j=function(N,M){u.push(function(Se,Re){f.data=Se,f.complete=Re!==!1,a.callHandler("_dsb.returnValue",f)}),N.apply(M,u)};if(g)H(g,this._dsf);else if(S)j(S,this._dsaf);else{var k=i.method.split(".");if(k.length<2)return;var F=k.pop(),J=k.join("."),I=this._dsf._obs,O=I[J]||{},v=O[F];if(v&&typeof v=="function"){H(v,O);return}if(I=this._dsaf._obs,O=I[J]||{},v=O[F],v&&typeof v=="function"){j(v,O);return}}}};for(var s in o)window[s]=o[s]}}(),a},_=(e=>/(kb)/i.test(e)?h():{registerHandler(n,r){throw c.UNSUPPORTED_BRIDGE_ENV},callHandler(n,r,a){throw c.UNSUPPORTED_BRIDGE_ENV}})((L=window==null?void 0:window.navigator)==null?void 0:L.userAgent),R=e=>new Promise((n,r)=>{var a,o,s;try{_.registerHandler(e.name,e.handler),(a=e.success)==null||a.call(e),n()}catch(i){(o=e.fail)==null||o.call(e,i),r(i)}finally{(s=e.complete)==null||s.call(e)}});function y(e){const n=r=>{let a;const o=i=>{var u;(!a||a==="success")&&(a="success",(u=r.success)==null||u.call(r,i))},s=i=>{var u;a||(a="error",(u=r.fail)==null||u.call(r,i))};r.timeout&&setTimeout(()=>{s(c.TIMEOUT)},r.timeout);try{_.callHandler(r.name,r.params,i=>{let u;try{typeof i=="string"?u=JSON.parse(i.replace(/^\s+|\s+$/g,"").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\u0000-\u001F\u007F-\u009F]/g,function(f){return f===`
|
|
2
|
+
`||f==="\r"?f:f===" "?"\\t":""})):u=i}catch(f){u=i}o(u)})}catch(i){s(i)}};return new Promise((r,a)=>{n({name:e.name,params:l(e.params),timeout:e.timeout,success:o=>{var s,i;(s=e.success)==null||s.call(e,o),(i=e.complete)==null||i.call(e),r(o)},fail:o=>{var s,i;(s=e.fail)==null||s.call(e,o),(i=e.complete)==null||i.call(e),a(o)}})})}function p(e){_.callHandler(e.name,e.params,n=>{})}function d(e){return function(...r){return A(this,null,function*(){const f=r[0]||{},{success:o,fail:s,complete:i}=f,u=m(f,["success","fail","complete"]);try{const g=yield Promise.resolve(e(u));return o==null||o(g),g}catch(g){const S=g!=null&&g.errorCode?g:new c({errorCode:c.UNKNOWN.errorCode,errorMsg:String(g)});throw s==null||s(S),S}finally{i==null||i()}})}}function E(e){const n=new Map;return function(...r){const a=JSON.stringify(r);if(n.has(a))return n.get(a);const o=e(...r);return n.set(a,o),Promise.resolve(o).catch(()=>{n.delete(a)}),o}}class ${}const q=d(E(()=>y({name:"OpenActRequest",timeout:5e3,params:{type:35,data:{}}}))),V=d(e=>A(this,null,function*(){return(yield q()).vcode>=e.minVersion}));function z(e,n){return(...r)=>V({minVersion:e.minVersion}).then(a=>a?n(...r):Promise.reject(new c({errorCode:c.UNSUPPORTED_VERSION.errorCode,errorMsg:`最低版本要求${e.minVersion}`})))}const X=d(()=>{p({name:"OpenActRequest",params:{type:56,data:null}})}),Y=d(()=>{p({name:"OpenActRequest",params:{type:-1,data:{}}})}),U={microphone:{description:"用于发帖上传音频"},location:{description:"获取你选择的位置信息,用于线下导航服务"},camera:{description:"收集你选中的照片或视频信息 ,用于 发表评论、分享视频"}},Z=d(e=>(Object.assign(U,e),R({name:"getPermissionUsage",handler(n,r){r(U[n.permission])}}))),x=/(kb_flutter|kb_dsbridge_flutter|kb_ios|kb_android|kb_dsbridge_android)/i.test(window.navigator.userAgent),ee=d(e=>A(this,null,function*(){const o=e,{kbKey:n}=o,r=m(o,["kbKey"]),{data:a}=yield y({name:"OpenActRequest",timeout:5e3,params:{type:51,data:r}});return a}));var B=(e=>(e[e.FREE=1]="FREE",e[e.FORBID=2]="FORBID",e[e.REQUIRED=3]="REQUIRED",e))(B||{});class C{constructor(){this.textMin=0,this.textMax=1e3,this.imageMax=9,this.imageMin=0,this.audioRqr=1,this.videoRqr=1,this.mediaRqr=2,this.streetRqr=1}}function te(e){const n=new C;return e&&Object.keys(e).forEach(r=>{n[r]=e[r]}),{hint:e==null?void 0:e.placeholder,initialText:e==null?void 0:e.initialText,audio:n.audioRqr!==2,image:n.imageMax!==0,video:n.videoRqr!==2,address:n.streetRqr!==2,asset_video:n.mediaRqr!==2,audio_must:n.audioRqr===3,image_must:n.imageMin>0,asset_video_must:n.mediaRqr===3,max_image_count:n.imageMax,min_image_count:n.imageMin,video_must:n.videoRqr===3,text_must:n.textMin>0,content_max_length:n.textMax,content_min_length:n.textMin}}const ne=d(e=>A(this,null,function*(){var n;return y({name:"OpenActRequest",params:{type:13,data:(n=e==null?void 0:e.postRule)!=null?n:{}}}).then(({data:r})=>{const s=r,{pic:a}=s,o=m(s,["pic"]);return K({images:a},o)})})),re=d(e=>{p({name:"OpenActRequest",params:{type:69,data:{eventId:e.eventName,trackParams:e.eventParams,ExtEventType:e.eventType}}})}),ie=d(e=>{p({name:"OpenActRequest",params:{type:1001,data:e}})}),oe=d(e=>A(this,null,function*(){if(!e.imageUrl&&!e.encodedImage)return Promise.reject(c.createBusinessError("imageUrl or encodedImage is required"));p({name:"OpenActRequest",params:{type:62,data:e}})})),se=d(e=>{p({name:"OpenActRequest",params:{type:63,data:e}})}),ae=d(()=>y({name:"OpenActRequest",params:{type:26,data:{}}})),ce=d(e=>{p({name:"OpenActRequest",params:{type:71,data:e}})}),de=d(e=>{p({name:"OpenActRequest",params:{type:64,data:e}})}),ue=d(e=>{p({name:"OpenActRequest",params:{type:58,data:e}})}),P="SHARE_EVENT_NAME";class le{}const fe=d(e=>R({name:"CommonShare",handler(n,r){window.dispatchEvent(new Event(P)),"onShareApp"in e&&e.onShareApp?r({type:12,data:e.onShareApp()}):r({type:12,data:e})}})),pe=d(e=>A(this,null,function*(){window.dispatchEvent(new Event(P)),p({name:"OpenActRequest",params:{type:58,data:e}})}));function ge(e){return window.addEventListener(P,e),()=>{window.removeEventListener(P,e)}}const he=d(e=>{p({name:"OpenActRequest",params:{type:68,data:{show:e.showMenu,showActionMode:e.panelStyle||0}}})}),we=d(()=>y({name:"OpenActRequest",params:{type:72}})),Ae=d(()=>A(this,null,function*(){p({name:"OpenActRequest",params:{type:73}})}));class ye{}const D=d(()=>A(this,null,function*(){return(yield y({name:"OpenActRequest",timeout:5e3,params:{type:31,data:{requireLogin:!1}}})).data||null})),T=(()=>{const e=new Set,n=(()=>{let r;const a=o=>{r=setTimeout(()=>A(this,null,function*(){const i=yield D();if(!i)return a(++o);e.forEach(u=>u(i)),e.clear()}),(i=>i===0?0:i<50?600:i<80?1e3:5e3)(o))};return{start(){r&&clearTimeout(r),e.size>0&&a(0)},stop(){r&&clearTimeout(r)}}})();return{addTask(r){e.add(r)},removeTask(r){e.delete(r),e.size===0&&n.stop()},triggerCheckTask(){n.start()}}})(),ve=d(()=>A(this,null,function*(){T.triggerCheckTask(),yield p({name:"OpenActRequest",params:{type:31,data:{requireLogin:!0}}})})),_e=e=>(T.addTask(e),T.triggerCheckTask(),()=>{T.removeTask(e)});t.AppBaseInfo=$,t.AppLoginInfo=ye,t.AppShareModel=le,t.BridgeCode=c,t.IS_KB_APP_ENV=x,t.KbRequirement=B,t.NoteThreadPostRule=C,t.checkForNewVersion=X,t.closeWebView=Y,t.decorateAppVersionSupport=z,t.defineAppShareModel=fe,t.defineAppSharePanelState=he,t.defineBridgeCallback=R,t.definePermissionUsage=Z,t.generateKBSign=ee,t.generatePostEditorParamsByThreadPostRule=te,t.getAppBaseInfo=q,t.getAppLoginInfo=D,t.getAppSubscribeNotifyStatus=we,t.isAppVersionSupport=V,t.onAppSharePanelShow=ge,t.onLoopCheckAppLogin=_e,t.openAppSharePanel=pe,t.openAppSubscribeNotifySettings=Ae,t.openPostEditor=ne,t.reportDAEvent=re,t.runAction=ie,t.runBridgeApi=p,t.runBridgeApiResponse=y,t.saveImageToLocal=oe,t.saveVideoToLocal=se,t.scanQRCode=ae,t.setScreenOrientation=ce,t.setWebViewTitle=de,t.shareImage=ue,t.triggerAppLogin=ve,Object.defineProperty(t,Symbol.toStringTag,{value:"Module"})});
|
|
@@ -8,12 +8,13 @@
|
|
|
8
8
|
|
|
9
9
|
#### 请求参数
|
|
10
10
|
|
|
11
|
-
| 参数
|
|
12
|
-
|
|
|
13
|
-
| `imageUrl`
|
|
14
|
-
| `
|
|
15
|
-
| `
|
|
16
|
-
| `
|
|
11
|
+
| 参数 | 类型 | 必填 | 说明 |
|
|
12
|
+
| -------------- | ----------------------------- | ---- | --------------------------------------- |
|
|
13
|
+
| `imageUrl` | `string` | 否 | 图片网络地址(与 `encodedImage` 二选一) |
|
|
14
|
+
| `encodedImage` | `string` | 否 | 图片 base64(与 `imageUrl` 二选一) |
|
|
15
|
+
| `success` | `() => void` | 否 | 成功回调 |
|
|
16
|
+
| `fail` | `(error: BridgeCode) => void` | 否 | 失败回调 |
|
|
17
|
+
| `complete` | `() => void` | 否 | 完成回调 |
|
|
17
18
|
|
|
18
19
|
#### 返回值
|
|
19
20
|
|
|
@@ -41,6 +42,13 @@ saveImageToLocal({
|
|
|
41
42
|
console.log('保存图片失败', error)
|
|
42
43
|
},
|
|
43
44
|
})
|
|
45
|
+
|
|
46
|
+
saveImageToLocal({
|
|
47
|
+
encodedImage: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...',
|
|
48
|
+
success() {
|
|
49
|
+
console.log('保存base64图片成功')
|
|
50
|
+
},
|
|
51
|
+
})
|
|
44
52
|
```
|
|
45
53
|
|
|
46
54
|
> 支持 Promise 风格调用
|
package/package.json
CHANGED
package/README.md
DELETED
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
# 开吧客户端桥接
|
|
2
|
-
|
|
3
|
-
> ⚠️ 重要提示:本 SDK 基于 TypeScript 开发,所有 API 参数均带有明确的必填 / 选填类型标注。使用时请务必开启 TS 类型检查或在 IDE 中查看参数提示,必填项缺失会直接提示错误,选填项可按需传入,请勿忽略类型提示以避免使用异常。
|
|
4
|
-
|
|
5
|
-
## 下载
|
|
6
|
-
|
|
7
|
-
npm:
|
|
8
|
-
|
|
9
|
-
```js
|
|
10
|
-
npm i @kbapp/js-bridge
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
### 或通过 script 标签引入
|
|
14
|
-
|
|
15
|
-
使用 unpkg CDN:
|
|
16
|
-
|
|
17
|
-
```html
|
|
18
|
-
<script src="https://unpkg.com/@kbapp/js-bridge@latest/dist/umd/index.js"></script>
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
使用 jsdelivr CDN:
|
|
22
|
-
|
|
23
|
-
```html
|
|
24
|
-
<script src="https://cdn.jsdelivr.net/npm/@kbapp/js-bridge@latest/dist/umd/index.js"></script>
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
> 通过 script 标签引入后,SDK 将作为全局变量 `kbBridge` 挂载在 window 对象上
|
|
28
|
-
|
|
29
|
-
## 测试页面
|
|
30
|
-
|
|
31
|
-
[https://unpkg.com/@kbapp/js-bridge@latest/examples/index.html](https://unpkg.com/@kbapp/js-bridge@latest/examples/index.html)
|
|
32
|
-
|
|
33
|
-
## 示例
|
|
34
|
-
|
|
35
|
-
```js
|
|
36
|
-
import { saveImageToLocal } from '@kbapp/js-bridge'
|
|
37
|
-
|
|
38
|
-
function saveImageHandle() {
|
|
39
|
-
saveImageToLocal({
|
|
40
|
-
imageUrl: 'https://static.kaiba315.com.cn/kaiba-logo.png',
|
|
41
|
-
success() {
|
|
42
|
-
console.log('执行成功')
|
|
43
|
-
},
|
|
44
|
-
})
|
|
45
|
-
}
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
### 通过 script 标签引入的使用示例
|
|
49
|
-
|
|
50
|
-
```html
|
|
51
|
-
<script src="https://unpkg.com/@kbapp/js-bridge@latest/dist/umd/index.js"></script>
|
|
52
|
-
<script>
|
|
53
|
-
async function saveImageHandle() {
|
|
54
|
-
// 通过全局变量kbBridge访问SDK功能
|
|
55
|
-
kbBridge.saveImageToLocal({
|
|
56
|
-
imageUrl: 'https://static.kaiba315.com.cn/kaiba-logo.png',
|
|
57
|
-
success() {
|
|
58
|
-
console.log('保存成功')
|
|
59
|
-
},
|
|
60
|
-
fail(error) {
|
|
61
|
-
console.log('保存失败', error)
|
|
62
|
-
},
|
|
63
|
-
})
|
|
64
|
-
}
|
|
65
|
-
</script>
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
## API
|
|
69
|
-
|
|
70
|
-
### 总览
|
|
71
|
-
|
|
72
|
-
| 桥接 type | 方法 | 说明 | 链接 |
|
|
73
|
-
| --------- | ---- | ---- | ---- |
|
|
74
|
-
| - | `defineBridgeCallback` | 定义桥接调用的回调函数 | [查看文档](docs/api/define-bridge-callback.md) |
|
|
75
|
-
| - | `runBridgeApi` | 执行桥接(无返回值) | [查看文档](docs/api/run-bridge-api.md) |
|
|
76
|
-
| - | `runBridgeApiResponse` | 执行桥接(等待响应) | [查看文档](docs/api/run-bridge-api-response.md) |
|
|
77
|
-
| - | `isAppVersionSupport` | 判断当前版本号是否支持 | [查看文档](docs/api/is-app-version-support.md) |
|
|
78
|
-
| -1 | `closeWebView` | 关闭当前 webview | [查看文档](docs/api/close-web-view.md) |
|
|
79
|
-
| - | `definePermissionUsage` | 定义隐私权限协议文案 | [查看文档](docs/api/define-permission-usage.md) |
|
|
80
|
-
| - | `onAppSharePanelShow` | 监听分享面板打开事件 | [查看文档](docs/api/on-app-share-panel-show.md) |
|
|
81
|
-
| 12 | `defineAppShareModel` | 定义页面分享内容 | [查看文档](docs/api/define-app-share-model.md) |
|
|
82
|
-
| 58 | `openAppSharePanel` | 主动唤起分享面板 | [查看文档](docs/api/open-app-share-panel.md) |
|
|
83
|
-
| 68 | `defineAppSharePanelState` | 定义分享面板控件布局 | [查看文档](docs/api/define-app-share-panel-state.md) |
|
|
84
|
-
| 13 | `openPostEditor` | 唤起发帖器 | [查看文档](docs/api/open-post-editor.md) |
|
|
85
|
-
| 26 | `scanQRCode` | 扫描二维码 | [查看文档](docs/api/scan-qrcode.md) |
|
|
86
|
-
| 35 | `getAppBaseInfo` | 获取设备信息 | [查看文档](docs/api/get-app-base-info.md) |
|
|
87
|
-
| 51 | `generateKBSign` | 生成 kbsign | [查看文档](docs/api/generate-kbsign.md) |
|
|
88
|
-
| 56 | `checkForNewVersion` | 检测是否有新版本 | [查看文档](docs/api/check-for-new-version.md) |
|
|
89
|
-
| 58 | `shareImage` | 分享海报 | [查看文档](docs/api/share-image.md) |
|
|
90
|
-
| 64 | `setWebViewTitle` | 设置网页标题 | [查看文档](docs/api/set-web-view-title.md) |
|
|
91
|
-
| 62 | `saveImageToLocal` | 保存图片到本地 | [查看文档](docs/api/save-image-to-local.md) |
|
|
92
|
-
| 63 | `saveVideoToLocal` | 保存视频到本地 | [查看文档](docs/api/save-video-to-local.md) |
|
|
93
|
-
| 69 | `reportDAEvent` | 上报数据埋点 | [查看文档](docs/api/report-daevent.md) |
|
|
94
|
-
| - | `onLoopCheckAppLogin` | 启动轮询检查 APP 登录状态 | [查看文档](docs/api/on-loop-check-app-login.md) |
|
|
95
|
-
| 31 | `getAppLoginInfo` | 获取 app 登录信息 | [查看文档](docs/api/get-app-login-info.md) |
|
|
96
|
-
| 31 | `triggerAppLogin` | 触发 app 登录 | [查看文档](docs/api/trigger-app-login.md) |
|
|
97
|
-
| 71 | `setScreenOrientation` | 设置屏幕方向 | [查看文档](docs/api/set-screen-orientation.md) |
|
|
98
|
-
| 72 | `getAppSubscribeNotifyStatus` | 获取APP订阅通知状态 | [查看文档](docs/api/get-app-subscribe-notify-status.md) |
|
|
99
|
-
| 73 | `openAppSubscribeNotifySettings` | 前往/打开 app订阅管理页面 | [查看文档](docs/api/open-app-subscribe-notify-settings.md) |
|
|
100
|
-
| 1001 | `runAction` | 执行 action | [查看文档](docs/api/run-action.md) |
|
|
101
|
-
|
|
102
|
-
| 类/枚举 | 说明 |
|
|
103
|
-
| --------------- | --------------------- |
|
|
104
|
-
| `BridgeCode` | kbapp 桥接状态码 |
|
|
105
|
-
| `IS_KB_APP_ENV` | 是否在开吧 APP 环境中 |
|
|
106
|
-
| `AppLoginInfo` | 登录信息模型 |
|
|
107
|
-
| `AppShareModel` | 应用分享模型 |
|
|
108
|
-
| `AppBaseInfo` | 设备信息模型 |
|