|
@@ -1271,42 +1271,42 @@ const handleHomeworkSubmit = async () => {
|
|
|
throw new Error('无法创建canvas上下文')
|
|
|
}*/
|
|
|
}
|
|
|
- const _a = iframeBody.getElementsByTagName('img')
|
|
|
- const _b = iframeBody.getElementsByTagName('video')
|
|
|
- for (let i = 0; i < _a.length; i++) {
|
|
|
- _a[i].removeAttribute('crossorigin')
|
|
|
- }
|
|
|
- for (let i = 0; i < _b.length; i++) {
|
|
|
- _b[i].removeAttribute('crossorigin')
|
|
|
- }
|
|
|
- // 将base64字符串转换为File对象
|
|
|
- const base64ToFile = (base64String: string, filename: string): File => {
|
|
|
- const arr = base64String.split(',')
|
|
|
- const mime = arr[0].match(/:(.*?);/)?.[1] || 'image/png'
|
|
|
- const bstr = atob(arr[1])
|
|
|
- let n = bstr.length
|
|
|
- const u8arr = new Uint8Array(n)
|
|
|
- while (n--) {
|
|
|
- u8arr[n] = bstr.charCodeAt(n)
|
|
|
- }
|
|
|
- return new File([u8arr], filename, { type: mime })
|
|
|
+ }
|
|
|
+ const _a = iframeBody.getElementsByTagName('img')
|
|
|
+ const _b = iframeBody.getElementsByTagName('video')
|
|
|
+ for (let i = 0; i < _a.length; i++) {
|
|
|
+ _a[i].removeAttribute('crossorigin')
|
|
|
+ }
|
|
|
+ for (let i = 0; i < _b.length; i++) {
|
|
|
+ _b[i].removeAttribute('crossorigin')
|
|
|
+ }
|
|
|
+ // 将base64字符串转换为File对象
|
|
|
+ const base64ToFile = (base64String: string, filename: string): File => {
|
|
|
+ const arr = base64String.split(',')
|
|
|
+ const mime = arr[0].match(/:(.*?);/)?.[1] || 'image/png'
|
|
|
+ const bstr = atob(arr[1])
|
|
|
+ let n = bstr.length
|
|
|
+ const u8arr = new Uint8Array(n)
|
|
|
+ while (n--) {
|
|
|
+ u8arr[n] = bstr.charCodeAt(n)
|
|
|
}
|
|
|
-
|
|
|
- const imageFile = base64ToFile(imageData, `screenshot_${Date.now()}.png`)
|
|
|
- const imageUrl = await uploadFile(imageFile)
|
|
|
- // 提交截图
|
|
|
- await submitWork(slideIndex.value, '73', imageUrl, '1') // 73表示截图工具,21表示图片类型
|
|
|
- message.success('页面截图提交成功')
|
|
|
- hasSubmitWork = true
|
|
|
-
|
|
|
- // 发送作业提交成功的socket消息
|
|
|
- sendMessage({
|
|
|
- type: 'homework_submitted',
|
|
|
- courseid: props.courseid,
|
|
|
- slideIndex: slideIndex.value,
|
|
|
- userid: props.userid
|
|
|
- })
|
|
|
+ return new File([u8arr], filename, { type: mime })
|
|
|
}
|
|
|
+
|
|
|
+ const imageFile = base64ToFile(imageData, `screenshot_${Date.now()}.png`)
|
|
|
+ const imageUrl = await uploadFile(imageFile)
|
|
|
+ // 提交截图
|
|
|
+ await submitWork(slideIndex.value, '73', imageUrl, '1') // 73表示截图工具,21表示图片类型
|
|
|
+ message.success('页面截图提交成功')
|
|
|
+ hasSubmitWork = true
|
|
|
+
|
|
|
+ // 发送作业提交成功的socket消息
|
|
|
+ sendMessage({
|
|
|
+ type: 'homework_submitted',
|
|
|
+ courseid: props.courseid,
|
|
|
+ slideIndex: slideIndex.value,
|
|
|
+ userid: props.userid
|
|
|
+ })
|
|
|
}
|
|
|
catch (error) {
|
|
|
console.error('截图提交失败:', error)
|
|
@@ -1431,26 +1431,24 @@ const handleRefreshPage = () => {
|
|
|
// 遍历所有iframe并刷新
|
|
|
for (let i = 0; i < iframes.length; i++) {
|
|
|
const iframe = iframes[i] as HTMLIFrameElement
|
|
|
- const currentSrc = iframe.src
|
|
|
-
|
|
|
- if (currentSrc) {
|
|
|
- console.log(`刷新iframe ${i + 1}:`, currentSrc)
|
|
|
-
|
|
|
- // 保存当前src
|
|
|
- const originalSrc = currentSrc
|
|
|
-
|
|
|
- // 清空src触发刷新
|
|
|
- iframe.src = ''
|
|
|
-
|
|
|
- // 短暂延迟后恢复src,确保刷新生效
|
|
|
+
|
|
|
+ if (iframe.src) {
|
|
|
+ // 仅当有src属性时刷新
|
|
|
+ const originalSrc = iframe.src
|
|
|
+ // 通过重新赋值src实现刷新,避免先清空再赋值导致的闪烁
|
|
|
+ iframe.src = originalSrc
|
|
|
+ console.log(`刷新iframe ${i + 1}:`, originalSrc)
|
|
|
+ refreshedCount++
|
|
|
+ } else if (iframe.srcdoc) {
|
|
|
+ // srcdoc场景下,重新赋值srcdoc内容
|
|
|
+ const originalSrcdoc = iframe.srcdoc
|
|
|
+ iframe.srcdoc = ''
|
|
|
setTimeout(() => {
|
|
|
- iframe.src = originalSrc
|
|
|
- console.log(`iframe ${i + 1} 刷新完成`)
|
|
|
- }, 100)
|
|
|
-
|
|
|
+ iframe.srcdoc = originalSrcdoc
|
|
|
+ console.log(`iframe ${i + 1} (srcdoc) 刷新完成`)
|
|
|
+ }, 50)
|
|
|
refreshedCount++
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
if (refreshedCount > 0) {
|
|
|
message.success(`刷新完成`)
|