Skip to content

pluginWindow

窗口事件监听 API,提供对插件窗口(Inline 或独立 Window)的显示/隐藏/焦点事件监听能力。

导入

typescript
import { pluginWindow } from 'onin-sdk';

API

事件监听

方法触发时机
pluginWindow.onShow(callback)窗口从隐藏变为可见
pluginWindow.onHide(callback)窗口从可见变为隐藏
pluginWindow.onFocus(callback)窗口获得焦点
pluginWindow.onBlur(callback)窗口失去焦点
typescript
pluginWindow.onShow(() => {
  // Inline 模式:Onin 展开且展示此插件时触发
  // Window 模式:独立窗口显示或从最小化恢复时触发
  refreshData();
});

pluginWindow.onHide(() => {
  // 暂停后台任务,节省资源
  pauseTimers();
});

生命周期语义

  • onHide 只表示窗口或内联视图从可见变为不可见,不等于销毁。
  • onBlur 只表示失去焦点,不等于隐藏。窗口仍然可能保持可见。
  • UI 清理请放在 mountPlugin(... ) 返回的 cleanup 中,或放在页面自身的卸载逻辑里。
  • 宿主只有在真实销毁视图时才会触发 cleanup;最常见的隐藏、最小化、失焦都不会触发 cleanup。

获取运行模式

typescript
// 同步获取(可能返回 'unknown',若运行时信息尚未初始化)
const mode = pluginWindow.getMode(); // 'inline' | 'window' | 'unknown'

// 异步获取(等待运行时初始化完成)
const mode = await pluginWindow.getModeAsync(); // 'inline' | 'window'

获取插件 ID

typescript
const pluginId = pluginWindow.getPluginId(); // string

示例

typescript
import { pluginWindow, storage } from 'onin-sdk';

let data: any[] = [];

// 每次窗口显示时刷新数据
pluginWindow.onShow(async () => {
  data = await fetchLatestData();
  renderList(data);
});

// 窗口隐藏时保存状态
pluginWindow.onHide(async () => {
  await storage.setItem('lastState', { timestamp: Date.now() });
});

// 根据模式调整 UI
const mode = await pluginWindow.getModeAsync();
if (mode === 'window') {
  // 独立窗口模式,可以显示更多内容
  document.querySelector('.sidebar')?.removeAttribute('hidden');
}

Inline vs Window 模式下的行为差异

事件Inline 模式Window 模式
onShowOnin 弹出并展示此插件独立窗口显示或最小化恢复
onHideOnin 窗口隐藏独立窗口最小化或隐藏
onFocus内嵌 Webview 获得焦点独立窗口获得焦点
onBlur内嵌 Webview 失去焦点独立窗口失去焦点

基于 MIT 协议发布