Skip to content

视图定制(viewer)

  • 支持环境:web/webview/node

创建自定义窗口(create)

  • 创建自定义窗口
  • 注:自定义窗口页面可用ksxz api列表与webview环境一致,通过acquireKsxzApi()获取
js
export interface IPoint {
  x: number;
  y: number;
}

export interface IViewerOptions {
  /** 窗口页面链接 */
  url: string;
  /** 窗口宽度(默认值:主窗口默认宽度) */
  width?: number;
  /** 窗口高度(默认值:主窗口默认高度) */
  height?: number;
  /** 最小窗口宽度(默认值:主窗口最小宽度) */
  minWidth?: number;
  /** 最小窗口高度(默认值:主窗口最小高度) */
  minHeight?: number;
  /** 最大窗口宽度 */
  maxWidth?: number;
  /** 最大窗口高度 */
  maxHeight?: number;
  /** 窗口水平位置 */
  x?: number;
  /** 窗口垂直位置 */
  y?: number;
  /** 是否居中显示(默认值:true) */
  center?: boolean;
  /** 是否置顶窗口层级(默认值:false) */
  alwaysOnTop?: boolean;
  /** 是否隐藏任务栏窗口(默认值:false) */
  skipTaskbar?: boolean;
  /** 窗口是否可获得焦点(默认值:true) */
  focusable?: boolean;
  /** 是否允许拖拽窗口大小(默认值:true) */
  resizable?: boolean;
  /** 是否允许窗口最小化(默认值:true) */
  minimizable?: boolean;
  /** 是否允许窗口最大化(默认值:true) */
  maximizable?: boolean;
  /** 是否允许窗口全屏(默认值:true) */
  fullscreenable?: boolean;
  /**
   * 窗口标题栏风格
   * default - 默认标准风格
   * hidden - 隐藏窗口标题栏
   */
  titleBarStyle?: "default" | "hidden";
  /** Mac系统交通灯位置 */
  trafficLightPosition?: ui.IPoint;
}

/**
 * 创建自定义窗口
 * @param id 窗口唯一标识,若id已存在将不会重复创建窗口
 * @param options 窗口配置参数
 */
export function create(id: string, options: IViewerOptions): Promise<void>;
  • 示例
js
const viewerId = "ext.viewer.id";
await ksxz.viewer.create(viewerId, {
  url: context.extension.fsPath + "meeting.html",
  width: 300,
  height: 300,
});

await ksxz.viewer.show(viewerId);

显示自定义窗口(show)

  • 显示自定义窗口
js
/** 显示自定义窗口
 * @param id 窗口唯一标识
 * @param inactive 是否只显示窗口而不聚焦窗口
 */
export function show(id: string, inactive?: boolean): Promise<void>;
  • 示例
js
await ksxz.viewer.show(viewerId, false);

关闭自定义窗口(close)

  • 关闭自定义窗口
js
/** 关闭自定义窗口
 * @param id 窗口唯一标识
 */
export function close(id: string): Promise<void>;
  • 示例
js
await ksxz.viewer.close(viewerId);
  • 说明 未指定force参数或参数值为false时,页面可通过beforeunload事件拦截窗口关闭流程
js
window.addEventListener('beforeunload', (e) => {
  e.returnValue = false

  // 页面自定义处理逻辑
  // ...
}

最小化窗口(minimize)

js
/** 最小化窗口 */
export function minimize(id: string): Promise<void>
  • 示例
js
await ksxz.viewer.minimize(viewerId);

获取窗口最小化状态(isMinimized)

js
/** 获取窗口最小化状态 */
export function isMinimized(id: string): Promise<boolean>
  • 示例
js
const isMinimized = await ksxz.viewer.isMinimized(viewerId);
console.log(isMinimized);

窗口最小化事件(onDidMinimize)

js
/** 窗口最小化事件 */
export function onDidMinimize(id: string, listener: IEventListener<void>): IDisposable
  • 示例
js
// 注册监听事件
const event = ksxz.viewer.onDidMinimize(viewerId, () => {
  console.log(`viewer[${viewerId}] minimize`);
});

// 页面或组件销毁前取消订阅
onBeforeDestroy(() => event.dispose());

最大化窗口(maximize)

js
/** 最大化窗口 */
export function maximize(id: string): Promise<void>
  • 示例
js
await ksxz.viewer.maximize(viewerId);

窗口最大化事件(onDidMaximize)

js
/** 窗口最大化事件 */
export function onDidMaximize(id: string, listener: IEventListener<void>): IDisposable
  • 示例
js
// 注册监听事件
const event = ksxz.viewer.onDidMaximize(viewerId, () => {
  console.log(`viewer[${viewerId}] maximize`);
});

// 页面或组件销毁前取消订阅
onBeforeDestroy(() => event.dispose());

取消最大化窗口(unmaximize)

js
/** 取消最大化窗口 */
export function unmaximize(id: string): Promise<void>
  • 示例
js
await ksxz.viewer.unmaximize(viewerId);

窗口取消最大化事件(onDidUnmaximize)

js
/** 窗口取消最大化事件 */
export function onDidMaximize(id: string, listener: IEventListener<void>): IDisposable
  • 示例
js
// 注册监听事件
const event = ksxz.viewer.onDidUnmaximize(viewerId, () => {
  console.log(`viewer[${viewerId}] unmaximize`);
});

// 页面或组件销毁前取消订阅
onBeforeDestroy(() => event.dispose());

获取窗口最大化状态(isMaximized)

js
/** 获取窗口最大化状态 */
export function isMaximized(id: string): Promise<boolean>
  • 示例
js
const isMaximized = await ksxz.viewer.isMaximized(viewerId);
console.log(isMaximized);

设置窗口全屏状态(setFullScreen)

js
/** 设置窗口全屏状态 */
export function setFullScreen(id: string, flag: boolean): Promise<void>
  • 示例
js
// 进入全屏
await ksxz.viewer.setFullScreen(viewerId, true);

// 退出全屏
await ksxz.viewer.setFullScreen(viewerId, false);

获取窗口全屏状态(isFullScreen)

js
/** 获取窗口全屏状态 */
export function isFullScreen(id: string): Promise<boolean>
  • 示例
js
const isFullScreen = await ksxz.viewer.isFullScreen(viewerId);
console.log(isFullScreen);

窗口进入全屏事件(onDidEnterFullScreen)

js
/** 窗口进入全屏事件 */
export function onDidEnterFullScreen(id: string, listener: IEventListener<void>): IDisposable
  • 示例
js
// 注册监听事件
const event = ksxz.viewer.onDidEnterFullScreen(viewerId, () => {
  console.log(`viewer[${viewerId}] enter fullscreen`);
});

// 页面或组件销毁前取消订阅
onBeforeDestroy(() => event.dispose());

窗口退出全屏事件(onDidLeaveFullScreen)

js
/** 窗口退出全屏事件 */
export function onDidLeaveFullScreen(id: string, listener: IEventListener<void>): IDisposable
  • 示例
js
// 注册监听事件
const event = ksxz.viewer.onDidLeaveFullScreen(viewerId, () => {
  console.log(`viewer[${viewerId}] leave fullscreen`);
});

// 页面或组件销毁前取消订阅
onBeforeDestroy(() => event.dispose());

设置窗口置顶状态(setAlwaysOnTop)

js
/** 设置窗口置顶状态 */
export function setAlwaysOnTop(id: string, isAlwaysOnTop: boolean): Promise<void>
  • 示例
js
// 置顶窗口
await ksxz.viewer.setAlwaysOnTop(viewerId, true);

// 取消置顶窗口
await ksxz.viewer.setAlwaysOnTop(viewerId, false);

获取窗口置顶状态(isAlwaysOnTop)

js
/** 获取窗口置顶状态 */
export function isAlwaysOnTop(id: string): Promise<boolean>
  • 示例
js
const isAlwaysOnTop = await ksxz.viewer.isAlwaysOnTop(viewerId);
console.log(isAlwaysOnTop);

窗口置顶状态变化事件(onDidAlwaysOnTopChange)

js
/** 窗口置顶状态变化事件 */
export function onDidAlwaysOnTopChange(id: string, listener: IEventListener<boolean>): IDisposable
  • 示例
js
// 注册监听事件
const event = ksxz.viewer.onDidAlwaysOnTopChange(viewerId, (isAlwaysOnTop) => {
  console.log(`viewer[${viewerId}] alwaysOnTop change: ${isAlwaysOnTop}`);
});

// 页面或组件销毁前取消订阅
onBeforeDestroy(() => event.dispose());

插件向自定义窗口页面发送消息(postMessage)

js
/**
 * 插件向自定义窗口页面发送消息
 * @param id 窗口唯一标识
 * @param message 消息内容
 */
export function postMessage(id: string, message: unknown): Promise<void>
  • 示例
js
await ksxz.viewer.postMessage(viewerId, message);

插件接收来自自定义窗口页面的消息事件(onDidReceiveMessage)

js
/** 插件接收来自自定义窗口页面的消息事件 */
export function onDidReceiveMessage<T = unknown>(id: string, listener: IEventListener<T>): IDisposable
  • 示例
js
// 注册监听事件
const event = ksxz.viewer.onDidReceiveMessage(viewerId, (message) => {
  console.log(`viewer[${viewerId}] message recv:`, message);
});

// 页面或组件销毁前取消订阅
onBeforeDestroy(() => event.dispose());

设置窗口标题(setTitle)

js
/** 设置窗口标题 */
export function setTitle(id: string, title: string): Promise<void>
  • 示例
js
await ksxz.viewer.setTitle(viewerId, title);

获取窗口标题(getTitle)

js
/** 获取窗口标题 */
export function getTitle(id: string): Promise<string>
  • 示例
js
const title = await ksxz.viewer.getTitle(viewerId);
console.log(title);