Quellcode durchsuchen

fix: 更新 CDN 镜像替换规则并补充更多源映射

优化 CDN 替换规则的优先级,新增多个常用 CDN 源的映射,包括 lucide、Google 系列、Font Awesome、Bootstrap、polyfill、jQuery、GitHub Raw 等,同时修复链式替换问题,确保替换准确性和稳定性。
lsc vor 1 Woche
Ursprung
Commit
9f9b1b242c
1 geänderte Dateien mit 56 neuen und 8 gelöschten Zeilen
  1. 56 8
      src/views/components/element/FrameElement/BaseFrameElement.vue

+ 56 - 8
src/views/components/element/FrameElement/BaseFrameElement.vue

@@ -163,27 +163,75 @@ const width = computed(() => {
 
 
 // srcdoc 外链 CDN 镜像替换
 // srcdoc 外链 CDN 镜像替换
 const CDN_RULES: [RegExp, string][] = [
 const CDN_RULES: [RegExp, string][] = [
-  // ===== lucide 特殊处理:必须指向 UMD 路径,并锁定版本 =====
+  // ===== 1. lucide 特殊处理(必须放在最前,且指向 UMD)=====
   [/unpkg\.com\/lucide@latest/g,
   [/unpkg\.com\/lucide@latest/g,
     'cdn.jsdmirror.com/npm/lucide@1.47.0/dist/umd/lucide.min.js'],
     'cdn.jsdmirror.com/npm/lucide@1.47.0/dist/umd/lucide.min.js'],
   [/unpkg\.com\/lucide@([\d.]+)/g,
   [/unpkg\.com\/lucide@([\d.]+)/g,
     'cdn.jsdmirror.com/npm/lucide@$1/dist/umd/lucide.min.js'],
     'cdn.jsdmirror.com/npm/lucide@$1/dist/umd/lucide.min.js'],
+  [/cdn\.jsdelivr\.net\/npm\/lucide@([\d.]+)(?!\/dist\/umd)/g,
+    'cdn.jsdmirror.com/npm/lucide@$1/dist/umd/lucide.min.js'],
 
 
-  // ===== 其他 unpkg 包 → jsDelivr npm 路径 =====
-  [/unpkg\.com/g, 'cdn.jsdelivr.net/npm'],
+  // ===== 2. unpkg → JSDMirror(一步到位,避免链式替换)=====
+  [/unpkg\.com/g, 'cdn.jsdmirror.com/npm'],
 
 
-  // ===== jsDelivr 全系列 → JSDMirror =====
-  [/cdn\.jsdelivr\.net/g, 'cdn.jsdmirror.com'],
+  // ===== 3. jsDelivr 全系列 → JSDMirror =====
   [/fastly\.jsdelivr\.net/g, 'cdn.jsdmirror.com'],
   [/fastly\.jsdelivr\.net/g, 'cdn.jsdmirror.com'],
   [/gcore\.jsdelivr\.net/g, 'cdn.jsdmirror.com'],
   [/gcore\.jsdelivr\.net/g, 'cdn.jsdmirror.com'],
+  [/cdn\.jsdelivr\.net/g, 'cdn.jsdmirror.com'],
 
 
-  // ===== cdnjs、Google Fonts、jQuery、Tailwind 规则保持不变 =====
-  [/cdnjs\.cloudflare\.com/g, 'cdnjs.loli.net'],
+  // ===== 4. Google Hosted Libraries → JSDMirror(按路径精确映射)=====
+  [/ajax\.googleapis\.com\/ajax\/libs\/jquery\/([\d.]+)\/jquery(\.min)?\.js/g,
+    'cdn.jsdmirror.com/npm/jquery@$1/dist/jquery$2.js'],
+  [/ajax\.googleapis\.com\/ajax\/libs\/([^\/]+)\/([\d.]+)\/(.+)/g,
+    'cdn.jsdmirror.com/npm/$1@$2/$3'],
+  [/ajax\.googleapis\.com\/ajax\/libs\/([^\/]+)\/([\d.]+)/g,
+    'cdn.jsdmirror.com/npm/$1@$2'],
+
+  // ===== 5. Google Fonts =====
   [/fonts\.googleapis\.com/g, 'fonts.loli.net'],
   [/fonts\.googleapis\.com/g, 'fonts.loli.net'],
   [/fonts\.gstatic\.com/g, 'gstatic.loli.net'],
   [/fonts\.gstatic\.com/g, 'gstatic.loli.net'],
-  [/code\.jquery\.com/g, 'cdn.jsdmirror.com/npm/jquery'],
+  [/themes\.googleusercontent\.com/g, 'gstatic.loli.net'],
+
+  // ===== 6. cdnjs =====
+  [/cdnjs\.cloudflare\.com/g, 'cdnjs.loli.net'],
+  [/cdnjs\.loli\.net/g, 'cdnjs.loli.net'], // 幂等,防止重复替换
+
+  // ===== 7. Font Awesome =====
+  [/kit\.fontawesome\.com/g, 'cdn.jsdmirror.com/npm/@fortawesome/fontawesome-free@6/js/all.min.js'],
+  [/use\.fontawesome\.com\/releases\/([^\/]+)\/css\/all\.min\.css/g,
+    'cdn.jsdmirror.com/npm/@fortawesome/fontawesome-free@$1/css/all.min.css'],
+
+  // ===== 8. Bootstrap CDN =====
+  [/stackpath\.bootstrapcdn\.com\/bootstrap\/([\d.]+)\/css\/bootstrap(\.min)?\.css/g,
+    'cdn.jsdmirror.com/npm/bootstrap@$1/dist/css/bootstrap$2.css'],
+  [/stackpath\.bootstrapcdn\.com\/bootstrap\/([\d.]+)\/js\/bootstrap(\.min)?\.js/g,
+    'cdn.jsdmirror.com/npm/bootstrap@$1/dist/js/bootstrap$2.js'],
+  [/maxcdn\.bootstrapcdn\.com\/bootstrap\/([\d.]+)\/css\/bootstrap(\.min)?\.css/g,
+    'cdn.jsdmirror.com/npm/bootstrap@$1/dist/css/bootstrap$2.css'],
+  [/maxcdn\.bootstrapcdn\.com\/bootstrap\/([\d.]+)\/js\/bootstrap(\.min)?\.js/g,
+    'cdn.jsdmirror.com/npm/bootstrap@$1/dist/js/bootstrap$2.js'],
+
+  // ===== 9. polyfill =====
+  [/polyfill\.io/g, 'cdn.jsdmirror.com/npm/polyfill-library@3/polyfill.min.js'],
+  [/polyfill-fastly\.io/g, 'cdn.jsdmirror.com/npm/polyfill-library@3/polyfill.min.js'],
+
+  // ===== 10. Tailwind Play CDN =====
   [/https?:\/\/cdn\.tailwindcss\.com[\d.\/]*/g,
   [/https?:\/\/cdn\.tailwindcss\.com[\d.\/]*/g,
     'https://cdn.jsdmirror.com/npm/@tailwindcss/browser@4.3.3'],
     'https://cdn.jsdmirror.com/npm/@tailwindcss/browser@4.3.3'],
+
+  // ===== 11. jQuery 官方 CDN =====
+  [/code\.jquery\.com\/jquery-([\d.]+)(\.min)?\.js/g,
+    'cdn.jsdmirror.com/npm/jquery@$1/dist/jquery$2.js'],
+
+  // ===== 12. GitHub Raw =====
+  [/raw\.githubusercontent\.com\/([^\/]+)\/([^\/]+)\/([^\/]+)\/(.+)/g,
+    'cdn.jsdmirror.com/gh/$1/$2@$3/$4'],
+  [/raw\.githack\.com\/([^\/]+)\/([^\/]+)\/([^\/]+)\/(.+)/g,
+    'cdn.jsdmirror.com/gh/$1/$2@$3/$4'],
+
+  // ===== 13. Gravatar(这个真没有靠谱国内镜像,建议保留原样)=====
+  // 如果必须替换,用下面这条,但不保证可用
+  // [/www\.gravatar\.com\/avatar/g, 'sdn.geekzu.org/avatar'],
 ]
 ]
 
 
 const processedSrcDoc = computed(() => {
 const processedSrcDoc = computed(() => {