router.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. const routes = {
  2. page1: "pages/page1.html",
  3. page2: "pages/page2.html",
  4. page3: "pages/page3.html",
  5. page4: "pages/page4.html",
  6. page5: "pages/page5.html",
  7. page6: "pages/page6.html",
  8. page7: "pages/page7.html",
  9. page8: "pages/page8.html",
  10. };
  11. function clearOldScripts() {
  12. document.querySelectorAll("script[data-dynamic='1']").forEach(s => s.remove());
  13. }
  14. function runScripts(container) {
  15. const scripts = container.querySelectorAll("script");
  16. scripts.forEach(oldScript => {
  17. const s = document.createElement("script");
  18. s.dataset.dynamic = "1";
  19. if (oldScript.src) {
  20. s.src = oldScript.src;
  21. } else {
  22. s.textContent = oldScript.textContent;
  23. }
  24. document.body.appendChild(s);
  25. });
  26. }
  27. async function loadPage(name) {
  28. const view = document.getElementById("view");
  29. const url = routes[name];
  30. if (!url) {
  31. view.innerHTML = "<div class='card'>无法找到页面</div>";
  32. return;
  33. }
  34. try {
  35. const res = await fetch(url, { credentials: "include" });
  36. const html = await res.text();
  37. if (html.includes("login.html") || html.includes("登录")) {
  38. window.location.href = "/";
  39. return;
  40. }
  41. const temp = document.createElement("div");
  42. temp.innerHTML = html;
  43. clearOldScripts();
  44. view.innerHTML = "";
  45. view.appendChild(temp);
  46. runScripts(temp);
  47. switch (name) {
  48. case "page1":
  49. break;
  50. case "page2":
  51. initPage2();
  52. break;
  53. case "page3":
  54. break;
  55. case "page4":
  56. break;
  57. case "page5":
  58. break;
  59. case "page6":
  60. break;
  61. case "page7":
  62. break;
  63. case "page8":
  64. break;
  65. }
  66. } catch (e) {
  67. console.error("loadPage error:", e);
  68. view.innerHTML = "<div class='card'>页面加载失败</div>";
  69. }
  70. }