feat:完成Collabora初步集成(返回顶部、文档页数获取)
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
/**
|
||||
* Collabora 导航/跳转功能模块
|
||||
*
|
||||
* @encoding UTF-8
|
||||
*/
|
||||
|
||||
import { sendUnoCommand } from '../Uno';
|
||||
|
||||
/**
|
||||
* 滚动到文档开头 (带焦点请求)
|
||||
* @param iframeWindow - iframe 的 contentWindow
|
||||
*/
|
||||
export async function unoScrollToTop(iframeWindow: Window): Promise<void> {
|
||||
// 1. 先请求 iframe 获取焦点
|
||||
const focusMessage = {
|
||||
MessageId: 'custompostMessage',
|
||||
Values: {
|
||||
Command: 'REQUEST_FOCUS',
|
||||
Args: {},
|
||||
},
|
||||
};
|
||||
console.log('[custompostMessage] 请求焦点 (滚动到顶部)');
|
||||
iframeWindow.postMessage(JSON.stringify(focusMessage), '*');
|
||||
|
||||
// 2. 等待焦点激活
|
||||
await new Promise((resolve) => setTimeout(resolve, 100));
|
||||
|
||||
// 3. 发送滚动命令,要发三次,有时候卡在表格里面就是需要多发几次
|
||||
sendUnoCommand(iframeWindow, '.uno:GoToStartOfDoc', {});
|
||||
sendUnoCommand(iframeWindow, '.uno:GoToStartOfDoc', {});
|
||||
sendUnoCommand(iframeWindow, '.uno:GoToStartOfDoc', {});
|
||||
}
|
||||
|
||||
/**
|
||||
* 跳转到指定页面
|
||||
* @param iframeWindow - iframe 的 contentWindow
|
||||
* @param pageNumber - 页码(从1开始)
|
||||
*/
|
||||
export function unoGotoPage(iframeWindow: Window, pageNumber: number): void {
|
||||
sendUnoCommand(iframeWindow, '.uno:GotoPage', {
|
||||
Page: {
|
||||
type: 'long',
|
||||
value: pageNumber,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 跳转到第一页
|
||||
* @param iframeWindow - iframe 的 contentWindow
|
||||
*/
|
||||
export function unoFirstPage(iframeWindow: Window): void {
|
||||
sendUnoCommand(iframeWindow, '.uno:FirstPage', {});
|
||||
}
|
||||
|
||||
/**
|
||||
* 跳转到最后一页
|
||||
* @param iframeWindow - iframe 的 contentWindow
|
||||
*/
|
||||
export function unoLastPage(iframeWindow: Window): void {
|
||||
sendUnoCommand(iframeWindow, '.uno:LastPage', {});
|
||||
}
|
||||
Reference in New Issue
Block a user