视图定制(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);- 注: 自定义窗口页面内通过ksxz.webpage API接收/发送消息
插件接收来自自定义窗口页面的消息事件(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);