Browse Source

refactor(课程服务): 简化getHTML方法并优化iframe内容获取逻辑

移除getHTML方法中的错误处理,由调用方处理异常
调整iframe内容获取流程,优先尝试getFile方法
lsc 1 month ago
parent
commit
d07b390a52
2 changed files with 13 additions and 18 deletions
  1. 1 4
      src/services/course.ts
  2. 12 14
      src/views/Student/index.vue

+ 1 - 4
src/services/course.ts

@@ -84,10 +84,7 @@ export const selectWorksStudent = (oid: string, cid: string): Promise<any> => {
  * @returns Promise<any>
  */
 export const getHTML = (url: string): Promise<any> => {
-  return axios.get(`${url}`).catch((error) => {
-    console.error('getHTML 请求失败:', error)
-    return null
-  })
+  return axios.get(`${url}`)
 }
 
 /**

+ 12 - 14
src/views/Student/index.vue

@@ -1442,24 +1442,22 @@ const processIframeLinks = async () => {
                   // 如果无法获取contentWindow,使用HTML方式
                   let html = null
                   try {
-                    html = await api.getHTML(iframeSrc)
-                    // const html = await api.getHTML('https://knowledge.cocorobo.cn/zh-CN/story-telling/a7fa08b8-cf60-11ef-93e3-12e77c4cb76b')
-                    console.log('html', html)
+                    const fileData = await getFile(iframeSrc)
+                    if (fileData && fileData.data) {
+                      const uint8Array = new Uint8Array(fileData.data)
+                      html = new TextDecoder('utf-8').decode(uint8Array)
+                      console.log('getFile 成功获取内容:', html)
+                    }
                   }
                   catch (error) {
-                    console.log(`getHTML 失败,尝试使用 getFile:`, error)
+                    console.log(`getFile 失败,尝试使用 getHTML:`, error)
                     try {
-                      const fileData = await getFile(iframeSrc)
-                      if (fileData && fileData.data) {
-                        // 将 ArrayBuffer 转为字符串
-                        const uint8Array = new Uint8Array(fileData.data)
-                        html = new TextDecoder('utf-8').decode(uint8Array)
-                        console.log('getFile 成功获取内容:', html)
-                      }
+                      html = await api.getHTML(iframeSrc)
+                      console.log('getHTML 成功获取内容:', html)
                     }
-                    catch (fileError) {
-                      console.error('getFile 也失败:', fileError)
-                      throw new Error(`无法获取内容: getHTML 和 getFile 都失败了`)
+                    catch (htmlError) {
+                      console.error('getHTML 也失败:', htmlError)
+                      throw new Error(`无法获取内容: getFile 和 getHTML 都失败了`)
                     }
                   }
                   console.log(`处理幻灯片 ${slideIndex + 1} 中的iframe链接:`, iframeSrc)