lsc hai 2 semanas
pai
achega
aee0cd44e1
Modificáronse 1 ficheiros con 49 adicións e 51 borrados
  1. 49 51
      src/views/Student/index.vue

+ 49 - 51
src/views/Student/index.vue

@@ -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(`刷新完成`)