客户端二开相关接口
- 主进程客户端相关接口
调起浏览器或者端内tab打开链接(openUrl)
- 支持环境:web插件
- 调起浏览器或者端内tab打开链接
js
export interface IOpenUrlOptions {
/** 标签页图标,默认为网页图标 */
icon?: string
/** 标签页标题,默认为网页标题 */
title?: string
/** 页面加载中文案(仅侧边栏面板可用) */
loadingText?: string
}
export function openUrl(url: string, target?: 'browser' | 'maintab' | 'internal-browser' | 'aside-panel', options?: IOpenUrlOptions): Promise<void>- 示例
js
await ksxz.client.openUrl('https://www.baidu.com', 'browser')
await ksxz.client.openUrl('https://www.baidu.com', 'maintab')打开渲染进程某个会话(openChat)
- 支持环境:web插件、webview页面
- 打开渲染进程某个会话
js
export function openChat(chatid: number): Promise<void>- 示例
js
await ksxz.client.openChat(chatid)打开侧边栏tab(openSidebarTab)
- 支持环境:web插件、webview
- 根据viewId打开主窗口侧边导航栏tab,props会传递给自定义视图:对于webview拼接到query参数;对于render方法通过
onDidChangeProps事件通知参数更新
js
export function openSidebarTab(viewId: string, props: Record<string, string>): Promise<void>- 示例
js
await ksxz.client.openSidebarTab('caixin.addressbook.view.a', { t: Date.now().toString() })自定义deeplink注册器(registerDeeplink)
- 支持环境:web插件
- 自定义deeplink行为注册器,目前只支持以 /custom 开头的path,自定义 ksoxz://xz.wps.cn/custom 行为处理器
- 影响范围
- ksoxz:// 链接跳转
- 浏览器打开 ksoxz://
- 匹配应用机器人卡片按钮为ksoxz:// url
- 示例
js
// 自定义 ksoxz://xz.wps.cn/custom/meeting 的行为
ksxz.client.registerDeeplink('/custom/meeting', function (query: any) {
ksxz.client.openSidebarTab('caixin.meeting.view')
})透传三方消息(onDidThirdCmdMsgPush)
- 支持环境:web插件、node插件、webview页面
- 订阅第三方 cmd websocket 消息,透传第三方服务端通过调用cmd msg接口传入的数据,客户端响应websocket事件,可用于消息事件订阅,例如会话呼叫、日程更新、红点更新等
js
export function onDidThirdCmdMsgPush(callback: (data: string) => void): IDisposable- 示例
js
const event = ksxz.client.onDidThirdCmdMsgPush(data => {
// 响应第三方服务端下发的数据
console.log(data)
})
// event.dispose()应用程序关闭前事件(onBeforeShutdown)
- 支持环境:node插件、web插件
- 在应用程序关闭之前触发,允许监听器否决关闭,以阻止关闭发生。
js
export interface BeforeShutdownEvent {
// 通过veto返回true时,会阻止程序退出
veto(value: boolean | Promise<boolean>, id: string): void
}
// 在应用程序关闭之前触发,允许监听器否决关闭,以阻止关闭发生。
export const onBeforeShutdown: Event<BeforeShutdownEvent>- 示例
js
// 异步
const disposable1 = ksxz.client.onBeforeShutdown(({veto}) => {
const vetoPromise = async () => {
const veto = await someting1()
return veto
}
veto(vetoPromise(), 'id1')
})
// 同步
const disposable2 = ksxz.client.onBeforeShutdown(({veto}) => {
const vetoFn = () => {
const veto = someting2()
return veto
}
veto(vetoFn(), 'id2')
})账号退出前事件(onBeforeAccountLogout)
- 支持环境:web插件
- 注册账号退出登录前事件,使用join方式可以在退出前等待事件回调Promise执行完成
js
export function onBeforeAccountLogout(callback: (evt: { join(promise: Promise<any>): void }) => void): IDisposable- 示例
js
import ksxz from 'ksxz'
const event = ksxz.client.onBeforeAccountLogout(({ join }) =>
join(
new Promise(resolve => {
// 执行第三方sso退登逻辑
resolve()
})
)
)
// event.dispose()账号登录成功事件(onAccountLoginSuccess)
- 支持环境:web插件
- 注册账号登录成功事件
js
export function onAccountLoginSuccess(callback: () => void): IDisposable- 示例
js
const event = ksxz.client.onAccountLoginSuccess(() => {})
// event.dispose()ws已连接事件(onWsConnected)
- 支持环境:web插件
- 注册ws已连接事件,在ws连上时触发
js
export function onWsConnected(callback: () => void): IDisposable- 示例
js
const event = ksxz.client.onWsConnected(() => {})
// event.dispose()链接打开前事件(onBeforeOpenUrl)
- 支持环境:node插件
- 注册打开 url 链接前事件,可以通过返回值方式来控制是否需要拦截内部处理,实现自定义url处理逻辑
- 生效窗口:IM窗口、搜索聊天记录窗口
js
export function onBeforeOpenUrl(callback: (evt: { url: string; join(promise: Promise<boolean>): void }) => void): IDisposable- 示例
js
import ksxz from 'ksxz'
ksxz.client.onBeforeOpenUrl(({url, join }) => {
if (url.startsWith('https://n.qsh1.cn/k')) {
join(new Promise(resolve => {
// 自定义 url 处理逻辑...
console.log(url)
// 处理完成此处必须返回 boolean 值,且要修改 Promise 状态
// resolve 返回 true,基座则会跳过该 url 的内置处理逻辑,返回 false 反之
// 如果 reject 则基座会继续处理该 url
resolve(true)
}))
}
})获取显示器信息(getDisplayInfo)
- 支持环境:web/webview/node
- 获取显示器信息
js
export interface IRectangle {
x: number;
y: number;
width: number;
height: number;
}
export interface IDisplay {
/** 显示器id */
id: number;
/** 显示器顺时针方向旋转角度,可能是0/90/180/270 */
rotation: number;
/** 显示器缩放比 */
scaleFactor: number;
/** 显示器边界信息 */
bounds: ui.IRectangle;
/** 显示器工作区域边界信息(如:在windows系统下除去任务栏的区域) */
workArea: ui.IRectangle;
}
/**
* 获取显示器信息
* @param target 目标显示器
* primary - 主显示器
* mainwindow - 主窗口所在显示器
* cursor - 鼠标所在显示器
*/
export function getDisplayInfo(
target: "primary" | "mainwindow" | "cursor"
): Promise<IDisplay>;- 示例
js
const display = await ksxz.client.getDisplayInfo('primary')
console.log(display)