Browse Source

fix: 修复 iframe 跨域时的语法错误和逻辑问题

修复了 iframe 跨域处理分支中的大括号换行和缩进问题,调整了异常捕获的逻辑顺序,确保在所有抓取方式失败后能正确执行回退逻辑并标记元素加载完成。
lsc 5 days ago
parent
commit
9806949251
1 changed files with 14 additions and 9 deletions
  1. 14 9
      src/views/components/element/FrameElement/BaseFrameElement.vue

+ 14 - 9
src/views/components/element/FrameElement/BaseFrameElement.vue

@@ -319,20 +319,24 @@ const handleIframeLoad = async (event: Event) => {
       if (iframe.contentDocument) {
         console.log('type=73 同源可访问 contentDocument,标记 isDone,保留直接加载')
         slidesStore.updateElement({ id: info.id, props: { isDone: true } })
-      } else {
+      }
+      else {
         console.log('type=73 跨域,尝试抓取 HTML 做 srcdoc')
         let html: string | null = null
         try {
           html = await api.getHTML(info.url)
-        } catch (_e) {
+        }
+        catch (_e) {
           try {
             const fd = await getFile(info.url)
             if (fd?.data) html = new TextDecoder('utf-8').decode(new Uint8Array(fd.data))
-          } catch (_e2) {
+          }
+          catch (_e2) {
             try {
               const fd2 = await getFile2(info.url)
               if (fd2?.data) html = new TextDecoder('utf-8').decode(new Uint8Array(fd2.data))
-            } catch (e3) {
+            }
+            catch (e3) {
               console.error('type=73 抓取全部失败:', e3)
             }
           }
@@ -347,12 +351,13 @@ const handleIframeLoad = async (event: Event) => {
             props: { isHTML: true, url: html, curl: info.url, isDone: true },
           })
           return // updateElement 会触发 iframe 重建,不再走下面的 JS 注入
-        } else {
-          console.warn('type=73 抓取失败,回退为直接加载,标记 isDone')
-          slidesStore.updateElement({ id: info.id, props: { isDone: true } })
-        }
+        } 
+        console.warn('type=73 抓取失败,回退为直接加载,标记 isDone')
+        slidesStore.updateElement({ id: info.id, props: { isDone: true } })
+        
       }
-    } catch (err) {
+    }
+    catch (err) {
       console.error('type=73 延迟处理异常:', err)
       // 出错也设 isDone=true,避免无限重试
       slidesStore.updateElement({ id: info.id, props: { isDone: true } })