Просмотр исходного кода

feat: 微应用直接访问统一注入404跳转

cuiyalong 2 лет назад
Родитель
Сommit
3d40b9cab4

+ 39 - 0
src/web/staticres/micro/js/qiankun-common-functions.js

@@ -0,0 +1,39 @@
+/**
+ * 判断当前应用路由是否匹配到
+ * @param router
+ * @returns {boolean}
+ */
+function getHasRouteMatched(router) {
+  var pathName = location.pathname;
+  var baseName = router.options.base;
+  var pathIndex = pathName.indexOf(baseName);
+
+  if (pathIndex > -1) {
+    var nowPath = pathName.slice(pathIndex + baseName.length);
+    var { route } = router.resolve({
+      path: nowPath,
+    });
+    var hasRouteMatched = route.matched.length > 0;
+    return hasRouteMatched;
+  }
+  return false;
+}
+
+/**
+ * 子应用 404 页面拦截
+ * @param router
+ */
+function addNotFindPage(router) {
+  var notFindPage = "/page_error/404.html";
+  router.beforeEach((to, from, next) => {
+    if (to.matched.length === 0) {
+      window.top.location.replace(notFindPage);
+    } else {
+      next();
+    }
+  });
+
+  if (!getHasRouteMatched(router)) {
+    window.top.location.replace(notFindPage);
+  }
+}

+ 14 - 0
src/web/templates/frontRouter/pc/docs/sess/index.html

@@ -51,6 +51,7 @@
     <script src="https://cdn-common.jianyu360.com/cdn/lib/systemjs/6.8.3/dist/extras/named-exports.js"></script>
     <script src="https://cdn-common.jianyu360.com/cdn/lib/systemjs/6.8.3/dist/extras/named-exports.js"></script>
     <script src="https://cdn-common.jianyu360.com/cdn/lib/systemjs/6.8.3/dist/extras/named-register.min.js"></script>
     <script src="https://cdn-common.jianyu360.com/cdn/lib/systemjs/6.8.3/dist/extras/named-register.min.js"></script>
     <script src="https://cdn-common.jianyu360.com/cdn/lib/systemjs/6.8.3/dist/extras/use-default.min.js"></script>
     <script src="https://cdn-common.jianyu360.com/cdn/lib/systemjs/6.8.3/dist/extras/use-default.min.js"></script>
+    <script src='/micro/js/qiankun-common-functions.js?v={{Msg "seo" "version"}}'></script>
     <!-- E-注入  -->
     <!-- E-注入  -->
 
 
     <style>
     <style>
@@ -102,6 +103,19 @@
 
 
       singleSpa.start();
       singleSpa.start();
     })
     })
+
+    // 监听single-spa
+    window.addEventListener('single-spa:first-mount', (e) => {
+      var childAppRoot = $('#single-spa-app').children('.docs-app')[0]
+      if (childAppRoot) {
+        var childApp = root.__vue__
+        var router = childApp.$router
+        addNotFindPage(router)
+      }
+      console.log(
+        'single-spa is about to mount the very first application for the first time',
+      )
+    })
   })()
   })()
 </script>
 </script>
 <script src='{{Msg "seo" "cdn"}}/js/jquery.cookie.js?v={{Msg "seo" "version"}}' type="text/javascript"></script>
 <script src='{{Msg "seo" "cdn"}}/js/jquery.cookie.js?v={{Msg "seo" "version"}}' type="text/javascript"></script>

+ 4 - 0
src/web/templates/frontRouter/pc/entpc/sess/index.html

@@ -64,6 +64,7 @@
 <!-- 主应用依赖 -->
 <!-- 主应用依赖 -->
 <script src=//cdn-common.jianyu360.com/cdn/lib/url-polyfill/1.1.12/url-polyfill.min.js></script>
 <script src=//cdn-common.jianyu360.com/cdn/lib/url-polyfill/1.1.12/url-polyfill.min.js></script>
 <script src=//cdn-common.jianyu360.com/cdn/lib/qiankun/2.7.0/index.umd.min.js></script>
 <script src=//cdn-common.jianyu360.com/cdn/lib/qiankun/2.7.0/index.umd.min.js></script>
+<script src='/micro/js/qiankun-common-functions.js?v={{Msg "seo" "version"}}'></script>
 <script>
 <script>
     window.__QIANKUN_ROUTER_BASE = '/entpc'
     window.__QIANKUN_ROUTER_BASE = '/entpc'
     qiankun.registerMicroApps(
     qiankun.registerMicroApps(
@@ -77,6 +78,9 @@
                   className: window.parent !== window ? 'in-app' : 'in-web',
                   className: window.parent !== window ? 'in-app' : 'in-web',
                   inject: function (options) {
                   inject: function (options) {
                     options.Vue.prototype.$BRACE = window.$BRACE
                     options.Vue.prototype.$BRACE = window.$BRACE
+                    if (options.router) {
+                        addNotFindPage(options.router)
+                    }
                   }
                   }
                 }
                 }
             }
             }

+ 14 - 0
src/web/templates/frontRouter/pc/integral/sess/index.html

@@ -49,6 +49,7 @@
     <script src="https://cdn-common.jianyu360.com/cdn/lib/systemjs/6.8.3/dist/extras/named-exports.js"></script>
     <script src="https://cdn-common.jianyu360.com/cdn/lib/systemjs/6.8.3/dist/extras/named-exports.js"></script>
     <script src="https://cdn-common.jianyu360.com/cdn/lib/systemjs/6.8.3/dist/extras/named-register.min.js"></script>
     <script src="https://cdn-common.jianyu360.com/cdn/lib/systemjs/6.8.3/dist/extras/named-register.min.js"></script>
     <script src="https://cdn-common.jianyu360.com/cdn/lib/systemjs/6.8.3/dist/extras/use-default.min.js"></script>
     <script src="https://cdn-common.jianyu360.com/cdn/lib/systemjs/6.8.3/dist/extras/use-default.min.js"></script>
+    <script src='/micro/js/qiankun-common-functions.js?v={{Msg "seo" "version"}}'></script>
     <!-- E-注入  -->
     <!-- E-注入  -->
 
 
     <style>
     <style>
@@ -88,6 +89,19 @@
 
 
       singleSpa.start();
       singleSpa.start();
     })
     })
+
+    // 监听single-spa
+    window.addEventListener('single-spa:first-mount', (e) => {
+      var childAppRoot = $('#single-spa-app').children('.home')[0]
+      if (childAppRoot) {
+        var childApp = root.__vue__
+        var router = childApp.$router
+        addNotFindPage(router)
+      }
+      console.log(
+        'single-spa is about to mount the very first application for the first time',
+      )
+    })
   })()
   })()
 </script>
 </script>
 
 

+ 4 - 0
src/web/templates/frontRouter/pc/page_big_pc/sess/index.html

@@ -66,6 +66,7 @@
 <!-- 主应用依赖 -->
 <!-- 主应用依赖 -->
 <script src=//cdn-common.jianyu360.com/cdn/lib/url-polyfill/1.1.12/url-polyfill.min.js></script>
 <script src=//cdn-common.jianyu360.com/cdn/lib/url-polyfill/1.1.12/url-polyfill.min.js></script>
 <script src=//cdn-common.jianyu360.com/cdn/lib/qiankun/2.7.0/index.umd.min.js></script>
 <script src=//cdn-common.jianyu360.com/cdn/lib/qiankun/2.7.0/index.umd.min.js></script>
+<script src='/micro/js/qiankun-common-functions.js?v={{Msg "seo" "version"}}'></script>
 <script>
 <script>
     window.__QIANKUN_ROUTER_BASE = '/swordfish/page_big_pc'
     window.__QIANKUN_ROUTER_BASE = '/swordfish/page_big_pc'
     qiankun.registerMicroApps(
     qiankun.registerMicroApps(
@@ -79,6 +80,9 @@
                   className: window.parent !== window ? 'in-app' : 'in-web',
                   className: window.parent !== window ? 'in-app' : 'in-web',
                   inject: function (options) {
                   inject: function (options) {
                     options.Vue.prototype.$BRACE = window.$BRACE
                     options.Vue.prototype.$BRACE = window.$BRACE
+                    if (options.router) {
+                        addNotFindPage(options.router)
+                    }
                   }
                   }
                 }
                 }
             }
             }

+ 4 - 0
src/web/templates/frontRouter/pc/page_entbase_pc/sess/index.html

@@ -64,6 +64,7 @@
 <!-- 主应用依赖 -->
 <!-- 主应用依赖 -->
 <script src=//cdn-common.jianyu360.com/cdn/lib/url-polyfill/1.1.12/url-polyfill.min.js></script>
 <script src=//cdn-common.jianyu360.com/cdn/lib/url-polyfill/1.1.12/url-polyfill.min.js></script>
 <script src=//cdn-common.jianyu360.com/cdn/lib/qiankun/2.7.0/index.umd.min.js></script>
 <script src=//cdn-common.jianyu360.com/cdn/lib/qiankun/2.7.0/index.umd.min.js></script>
+<script src='/micro/js/qiankun-common-functions.js?v={{Msg "seo" "version"}}'></script>
 <script>
 <script>
     window.__QIANKUN_ROUTER_BASE = '/orgpc'
     window.__QIANKUN_ROUTER_BASE = '/orgpc'
     qiankun.registerMicroApps(
     qiankun.registerMicroApps(
@@ -77,6 +78,9 @@
                   className: window.parent !== window ? 'in-app' : 'in-web',
                   className: window.parent !== window ? 'in-app' : 'in-web',
                   inject: function (options) {
                   inject: function (options) {
                     options.Vue.prototype.$BRACE = window.$BRACE
                     options.Vue.prototype.$BRACE = window.$BRACE
+                    if (options.router) {
+                        addNotFindPage(options.router)
+                    }
                   }
                   }
                 }
                 }
             }
             }

+ 4 - 0
src/web/templates/frontRouter/pc/xspc/sess/index.html

@@ -67,6 +67,7 @@
 <!-- 主应用依赖 -->
 <!-- 主应用依赖 -->
 <script src=//cdn-common.jianyu360.com/cdn/lib/url-polyfill/1.1.12/url-polyfill.min.js></script>
 <script src=//cdn-common.jianyu360.com/cdn/lib/url-polyfill/1.1.12/url-polyfill.min.js></script>
 <script src=//cdn-common.jianyu360.com/cdn/lib/qiankun/2.7.0/index.umd.min.js></script>
 <script src=//cdn-common.jianyu360.com/cdn/lib/qiankun/2.7.0/index.umd.min.js></script>
+<script src='/micro/js/qiankun-common-functions.js?v={{Msg "seo" "version"}}'></script>
 <script>
 <script>
   window.__QIANKUN_ROUTER_BASE = '/jyxspc'
   window.__QIANKUN_ROUTER_BASE = '/jyxspc'
   qiankun.registerMicroApps(
   qiankun.registerMicroApps(
@@ -80,6 +81,9 @@
               className: window.parent !== window ? 'in-app' : 'in-web',
               className: window.parent !== window ? 'in-app' : 'in-web',
               inject: function (options) {
               inject: function (options) {
                 options.Vue.prototype.$BRACE = window.$BRACE
                 options.Vue.prototype.$BRACE = window.$BRACE
+                if (options.router) {
+                  addNotFindPage(options.router)
+                }
               }
               }
             }
             }
         }
         }

+ 4 - 0
src/web/templates/micro/social-pc/index.html

@@ -63,6 +63,7 @@
 <!-- 主应用依赖 -->
 <!-- 主应用依赖 -->
 <script src=//cdn-common.jianyu360.com/cdn/lib/url-polyfill/1.1.12/url-polyfill.min.js></script>
 <script src=//cdn-common.jianyu360.com/cdn/lib/url-polyfill/1.1.12/url-polyfill.min.js></script>
 <script src=//cdn-common.jianyu360.com/cdn/lib/qiankun/2.7.0/index.umd.min.js></script>
 <script src=//cdn-common.jianyu360.com/cdn/lib/qiankun/2.7.0/index.umd.min.js></script>
+<script src='/micro/js/qiankun-common-functions.js?v={{Msg "seo" "version"}}'></script>
 
 
 <!-- 子应用依赖 -->
 <!-- 子应用依赖 -->
 <!-- <script src=//cdn-common.jianyu360.com/cdn/lib/pdfjs-dist/2.1.266/build/pdf.min.js></script>
 <!-- <script src=//cdn-common.jianyu360.com/cdn/lib/pdfjs-dist/2.1.266/build/pdf.min.js></script>
@@ -79,6 +80,9 @@
                   className: window.parent !== window ? 'in-app' : 'in-web',
                   className: window.parent !== window ? 'in-app' : 'in-web',
                   inject: function (options) {
                   inject: function (options) {
                     options.Vue.prototype.$BRACE = window.$BRACE
                     options.Vue.prototype.$BRACE = window.$BRACE
+                    if (options.router) {
+                        addNotFindPage(options.router)
+                    }
                   }
                   }
                 }
                 }
             }
             }

+ 4 - 0
src/web/templates/micro/web-pc/index.html

@@ -61,6 +61,7 @@
 <!-- 主应用依赖 -->
 <!-- 主应用依赖 -->
 <script src=//cdn-common.jianyu360.com/cdn/lib/url-polyfill/1.1.12/url-polyfill.min.js></script>
 <script src=//cdn-common.jianyu360.com/cdn/lib/url-polyfill/1.1.12/url-polyfill.min.js></script>
 <script src=//cdn-common.jianyu360.com/cdn/lib/qiankun/2.7.0/index.umd.min.js></script>
 <script src=//cdn-common.jianyu360.com/cdn/lib/qiankun/2.7.0/index.umd.min.js></script>
+<script src='/micro/js/qiankun-common-functions.js?v={{Msg "seo" "version"}}'></script>
 
 
 <!-- 子应用依赖 -->
 <!-- 子应用依赖 -->
 <!-- <script src=//cdn-common.jianyu360.com/cdn/lib/pdfjs-dist/2.1.266/build/pdf.min.js></script>
 <!-- <script src=//cdn-common.jianyu360.com/cdn/lib/pdfjs-dist/2.1.266/build/pdf.min.js></script>
@@ -78,6 +79,9 @@
                   className: window.parent !== window ? 'in-app' : 'in-web',
                   className: window.parent !== window ? 'in-app' : 'in-web',
                   inject: function (options) {
                   inject: function (options) {
                     options.Vue.prototype.$BRACE = window.$BRACE
                     options.Vue.prototype.$BRACE = window.$BRACE
+                    if (options.router) {
+                        addNotFindPage(options.router)
+                    }
                   }
                   }
                 }
                 }
             }
             }

+ 4 - 0
src/web/templates/site/page/helpCenter/videoDetail.html

@@ -66,6 +66,7 @@
 <!-- 主应用依赖 -->
 <!-- 主应用依赖 -->
 <script src=//cdn-common.jianyu360.com/cdn/lib/url-polyfill/1.1.12/url-polyfill.min.js></script>
 <script src=//cdn-common.jianyu360.com/cdn/lib/url-polyfill/1.1.12/url-polyfill.min.js></script>
 <script src=//cdn-common.jianyu360.com/cdn/lib/qiankun/2.7.0/index.umd.min.js></script>
 <script src=//cdn-common.jianyu360.com/cdn/lib/qiankun/2.7.0/index.umd.min.js></script>
+<script src='/micro/js/qiankun-common-functions.js?v={{Msg "seo" "version"}}'></script>
 <script>
 <script>
   // 该页面是帮助中心热门操作指南视频详情-页面指向线上课程项目的详情路由
   // 该页面是帮助中心热门操作指南视频详情-页面指向线上课程项目的详情路由
   // 因该页面的顶部顶部导航栏、标题等与线上课程的顶部导航栏不一致,故建两个父应用页面,子应用挂载为同一个(线上课程子应用)
   // 因该页面的顶部顶部导航栏、标题等与线上课程的顶部导航栏不一致,故建两个父应用页面,子应用挂载为同一个(线上课程子应用)
@@ -81,6 +82,9 @@
               className: window.parent !== window ? 'in-app' : 'in-web',
               className: window.parent !== window ? 'in-app' : 'in-web',
               inject: function (options) {
               inject: function (options) {
                 options.Vue.prototype.$BRACE = window.$BRACE
                 options.Vue.prototype.$BRACE = window.$BRACE
+                if (options.router) {
+                  addNotFindPage(options.router)
+                }
               }
               }
             }
             }
         }
         }