|
@@ -2193,24 +2193,49 @@ const handleHomeworkSubmit = async () => {
|
|
|
for (let i = 0;i < b.length;i++) {
|
|
for (let i = 0;i < b.length;i++) {
|
|
|
b[i].crossOrigin = 'anonymous'
|
|
b[i].crossOrigin = 'anonymous'
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- // 直接对iframe内部的body进行截图
|
|
|
|
|
- const html2canvas = await import('html2canvas')
|
|
|
|
|
- const canvas = await html2canvas.default(iframeBody, {
|
|
|
|
|
- // useCORS: true,
|
|
|
|
|
- // allowTaint: true,
|
|
|
|
|
- // scale: 1,
|
|
|
|
|
- // backgroundColor: '#ffffff',
|
|
|
|
|
- // logging: false,
|
|
|
|
|
- // foreignObjectRendering: true,
|
|
|
|
|
- // removeContainer: true
|
|
|
|
|
- scale: 2, // 提高清晰度
|
|
|
|
|
- allowTaint: false, // 是否允许跨域污染画布
|
|
|
|
|
- useCORS: true, // 尝试跨域加载图片
|
|
|
|
|
- logging: true,
|
|
|
|
|
- })
|
|
|
|
|
- imageData = canvas.toDataURL('image/png', 0.95)
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // 1. 创建全局禁用动画的 style 标签
|
|
|
|
|
+ const style = document.createElement('style')
|
|
|
|
|
+ style.id = 'html2canvas-freeze'
|
|
|
|
|
+ style.textContent = `
|
|
|
|
|
+ *, *::before, *::after {
|
|
|
|
|
+ animation: none !important;
|
|
|
|
|
+ transition: none !important;
|
|
|
|
|
+ }
|
|
|
|
|
+ `
|
|
|
|
|
+ iframeElement.contentWindow.document.head.appendChild(style)
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 强制重排,确保禁用生效
|
|
|
|
|
+ iframeElement.contentWindow.document.body.offsetHeight
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 如果词云图使用 ECharts 且存在,等它渲染稳定
|
|
|
|
|
+ if (typeof iframeElement.contentWindow.myChart !== 'undefined' && iframeElement.contentWindow.myChart && !iframeElement.contentWindow.myChart.isDisposed()) {
|
|
|
|
|
+ // 延迟 500ms 等待 ECharts 内部的 Canvas 动画结束
|
|
|
|
|
+ await new Promise(resolve => setTimeout(resolve, 500))
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ try {
|
|
|
|
|
+ // 直接对iframe内部的body进行截图
|
|
|
|
|
+ const html2canvas = await import('html2canvas')
|
|
|
|
|
+ const canvas = await html2canvas.default(iframeBody, {
|
|
|
|
|
+ // useCORS: true,
|
|
|
|
|
+ // allowTaint: true,
|
|
|
|
|
+ // scale: 1,
|
|
|
|
|
+ // backgroundColor: '#ffffff',
|
|
|
|
|
+ // logging: false,
|
|
|
|
|
+ // foreignObjectRendering: true,
|
|
|
|
|
+ // removeContainer: true
|
|
|
|
|
+ scale: 2, // 提高清晰度
|
|
|
|
|
+ allowTaint: false, // 是否允许跨域污染画布
|
|
|
|
|
+ useCORS: true, // 尝试跨域加载图片
|
|
|
|
|
+ logging: true,
|
|
|
|
|
+ })
|
|
|
|
|
+ imageData = canvas.toDataURL('image/png', 0.95)
|
|
|
|
|
+ }
|
|
|
|
|
+ finally {
|
|
|
|
|
+ const freezeStyle = iframeElement.contentWindow.document.getElementById('html2canvas-freeze')
|
|
|
|
|
+ if (freezeStyle) freezeStyle.remove()
|
|
|
|
|
+ }
|
|
|
console.log('成功截图iframe内部内容')
|
|
console.log('成功截图iframe内部内容')
|
|
|
}
|
|
}
|
|
|
catch (html2canvasError) {
|
|
catch (html2canvasError) {
|