fix: 修复桌面 DOCX 媒体捕获超时
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
export async function withHiddenWindowAnimationFrames<T>(
|
||||
windowRef: Window,
|
||||
operation: () => Promise<T>
|
||||
) {
|
||||
const requestAnimationFrame = windowRef.requestAnimationFrame;
|
||||
windowRef.requestAnimationFrame = (callback) =>
|
||||
windowRef.setTimeout(
|
||||
() => callback(windowRef.performance.now()),
|
||||
0
|
||||
);
|
||||
try {
|
||||
return await operation();
|
||||
} finally {
|
||||
windowRef.requestAnimationFrame = requestAnimationFrame;
|
||||
}
|
||||
}
|
||||
@@ -15,6 +15,7 @@ import {
|
||||
beginPreviewFrameRender,
|
||||
completePreviewFrameRender
|
||||
} from "./preview-frame-visibility";
|
||||
import { withHiddenWindowAnimationFrames } from "./hidden-window-animation-frame";
|
||||
|
||||
function getPreviewRoot() {
|
||||
const element = document.querySelector<HTMLElement>("#preview-root");
|
||||
@@ -139,22 +140,24 @@ window.__mdToPdfRender = async (
|
||||
return result;
|
||||
};
|
||||
window.__mdToPdfRenderDocxMedia = (payload, dimensions) =>
|
||||
renderDocxMediaCapturePlan(
|
||||
runtime,
|
||||
previewRoot,
|
||||
payload,
|
||||
dimensions
|
||||
withHiddenWindowAnimationFrames(window, () =>
|
||||
renderDocxMediaCapturePlan(
|
||||
runtime,
|
||||
previewRoot,
|
||||
payload,
|
||||
dimensions
|
||||
)
|
||||
);
|
||||
document.documentElement.dataset.runtimeReady = "true";
|
||||
|
||||
const desktopPdfBridge = window.__mdToPdfDesktopPdf;
|
||||
if (desktopPdfBridge) {
|
||||
desktopPdfBridge.onRender(async (requestId, payload) => {
|
||||
const requestAnimationFrame = window.requestAnimationFrame;
|
||||
window.requestAnimationFrame = (callback) =>
|
||||
window.setTimeout(() => callback(performance.now()), 0);
|
||||
try {
|
||||
const result = await window.__mdToPdfRender?.(payload, "pdf");
|
||||
const result = await withHiddenWindowAnimationFrames(
|
||||
window,
|
||||
async () => window.__mdToPdfRender?.(payload, "pdf")
|
||||
);
|
||||
if (!result) {
|
||||
throw new Error("PDF 分页运行时不可用");
|
||||
}
|
||||
@@ -164,8 +167,6 @@ if (desktopPdfBridge) {
|
||||
requestId,
|
||||
reason instanceof Error ? reason.message : "PDF 分页失败"
|
||||
);
|
||||
} finally {
|
||||
window.requestAnimationFrame = requestAnimationFrame;
|
||||
}
|
||||
});
|
||||
desktopPdfBridge.ready();
|
||||
|
||||
Reference in New Issue
Block a user