34 lines
1005 B
TypeScript
34 lines
1005 B
TypeScript
/**
|
|
* 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', {});
|
|
}
|
|
|