域名检测跳转.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. javascript: (function () {
  2. const urls = ["http://192.168.3.36:9002/", "https://tri.tianyunperfect.cn/"];
  3. function checkUrl(url) {
  4. return new Promise((resolve) => {
  5. const startTime = performance.now();
  6. const img = new Image();
  7. let isResolved = false;
  8. img.onload = function () {
  9. if (!isResolved) {
  10. isResolved = true;
  11. resolve({
  12. url: url,
  13. accessible: true,
  14. responseTime: performance.now() - startTime,
  15. });
  16. }
  17. };
  18. img.onerror = function () {
  19. if (!isResolved) {
  20. isResolved = true;
  21. resolve({
  22. url: url,
  23. accessible: true,
  24. responseTime: performance.now() - startTime,
  25. });
  26. }
  27. };
  28. setTimeout(() => {
  29. if (!isResolved) {
  30. isResolved = true;
  31. resolve({
  32. url: url,
  33. accessible: false,
  34. responseTime: 99999,
  35. });
  36. }
  37. }, 5000);
  38. const timestamp = new Date().getTime();
  39. img.src = url + `favicon.ico?t=${timestamp}`;
  40. });
  41. }
  42. function showStatus(message, isError = false) {
  43. let statusDiv = document.getElementById("url-checker-status");
  44. if (!statusDiv) {
  45. statusDiv = document.createElement("div");
  46. statusDiv.id = "url-checker-status";
  47. statusDiv.style.cssText = `
  48. position: fixed;
  49. top: 10px;
  50. right: 10px;
  51. padding: 10px;
  52. background: ${
  53. isError ? "rgba(255, 0, 0, 0.8)" : "rgba(0, 0, 0, 0.8)"
  54. };
  55. color: white;
  56. border-radius: 5px;
  57. z-index: 999999;
  58. font-family: Arial, sans-serif;
  59. font-size: 14px;
  60. max-width: 300px;
  61. word-break: break-word;
  62. `;
  63. document.body.appendChild(statusDiv);
  64. }
  65. statusDiv.textContent = message;
  66. return statusDiv;
  67. }
  68. async function checkAllUrls() {
  69. const statusDiv = showStatus("正在检测网络连接...");
  70. try {
  71. const results = await Promise.all(urls.map((url) => checkUrl(url)));
  72. const accessibleUrls = results.filter((result) => result.accessible);
  73. console.log("检测结果:", results);
  74. if (accessibleUrls.length === 0) {
  75. showStatus("所有地址均无法访问!", true);
  76. setTimeout(() => statusDiv.remove(), 3000);
  77. return;
  78. }
  79. const fastestUrl = accessibleUrls.reduce((prev, current) =>
  80. prev.responseTime < current.responseTime ? prev : current
  81. );
  82. showStatus(
  83. `正在跳转到最快地址: ${fastestUrl.url}\n响应时间: ${Math.round(
  84. fastestUrl.responseTime
  85. )}ms`
  86. );
  87. setTimeout(() => {
  88. window.location.href = fastestUrl.url;
  89. statusDiv.remove();
  90. }, 1500);
  91. } catch (error) {
  92. console.error("检测过程出错:", error);
  93. showStatus("检测过程出错,请稍后重试", true);
  94. setTimeout(() => statusDiv.remove(), 3000);
  95. }
  96. }
  97. checkAllUrls();
  98. })();