Skip to content

客户端二开相关接口

  • 主进程客户端相关接口

调起浏览器或者端内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() })
  • 支持环境:web插件
  • 自定义deeplink行为注册器,目前只支持以 /custom 开头的path,自定义 ksoxz://xz.wps.cn/custom 行为处理器
  • 影响范围
  1. ksoxz:// 链接跳转
  2. 浏览器打开 ksoxz://
  3. 匹配应用机器人卡片按钮为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)