1<!DOCTYPE html> 2<html lang="zh-CN"> 3 4<head> 5 <meta charset="utf-8"> 6 <meta name="apple-touch-fullscreen" content="YES" /> 7 <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> 8 <meta name="apple-mobile-web-app-capable" content="yes" /> 9 <meta name="format-detection" content="telephone=no" /> 10 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 11 <meta http-equiv="Cache-Control" content="no-siteapp"> 12 <meta name="renderer" content="webkit"> 13
13<script type="text/javascript" src="/js/jquery-2.1.0.min.js"></script>
13 14
14<script type="text/javascript" src="/js/jm.js"></script>
14 15
15<script type="text/javascript" src="/js/qrcode.min.js"></script>
15 16 <title>91JQå°±è¦æ¿æ - é²å±è½å°åç¼å¸é è«å å ¥æ¶è夾</title> 17 <style type="text/css"> 18 * { 19 margin: 0; 20 padding: 0; 21 box-sizing: border-box; 22 } 23 24 body { 25 background: #fafafa; 26 font-size: 18px; 27 line-height: 1.5; 28 font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, "Helvetica Neue", sans-serif; 29 color: #333; 30 } 31 32 a { 33 color: #FF6600; 34 text-decoration: none; 35 transition: opacity 0.3s; 36 } 37 38 a:hover, 39 a:focus { 40 opacity: 0.8; 41 } 42 43 .container { 44 max-width: 960px; 45 margin: 0 auto; 46 padding: 0 15px; 47 } 48 49 .header { 50 margin: 20px 0 15px; 51 text-align: center; 52 } 53 54 .header h1 { 55 font-size: 26px; 56 font-weight: bold; 57 color: #333; 58 margin: 0; 59 } 60 61 .info { 62 background: #fff; 63 border-radius: 8px; 64 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); 65 padding: 15px; 66 margin-bottom: 15px; 67 } 68 69 .notice-box { 70 margin-bottom: 15px; 71 } 72 73 .notice-item { 74 margin-bottom: 10px; 75 line-height: 1.6; 76 } 77 78 .text-red { 79 color: #FF0000; 80 font-weight: bold; 81 } 82 83 .text-blue { 84 color: #0066cc; 85 } 86 87 .text-green { 88 color: #009900; 89 } 90 91 .text-orange { 92 color: #FF6600; 93 } 94 95 .main-url { 96 font-size: 20px; 97 word-break: break-all; 98 } 99 100 .backup-link { 101 display: inline-block; 102 /* background: #fff3e6; */ 103 padding: 8px 12px; 104 border-radius: 6px; 105 margin: 8px 0; 106 border-left: 4px solid #FF6600; 107 } 108 109 .backup-link a { 110 font-weight: bold; 111 font-size: 18px; 112 display: block; 113 text-align: center; 114 } 115 116 .btn-enter { 117 display: block; 118 background: #0066cc; 119 color: #fff; 120 font-size: 22px; 121 font-weight: bold; 122 padding: 12px 25px; 123 border-radius: 8px; 124 text-align: center; 125 margin: 15px auto; 126 max-width: 500px; 127 transition: background 0.3s; 128 } 129 130 .btn-enter:hover { 131 background: #0052a3; 132 color: #fff; 133 opacity: 1; 134 } 135 136 .qrcode-wrapper { 137 text-align: center; 138 margin: 15px 0 10px; 139 } 140 141 #qrcode, 142 #new-qrcode { 143 display: flex; 144 justify-content: center; 145 align-items: center; 146 margin: 0 auto; 147 } 148 149 #new-qrcode canvas, 150 #new-qrcode img { 151 max-width: 45%; 152 height: auto; 153 } 154 155 #tip { 156 text-align: center; 157 color: #666; 158 margin-top: 10px; 159 font-size: 15px; 160 } 161 162 .guide-text { 163 font-size: 15px; 164 color: #666; 165 line-height: 1.7; 166 } 167 168 .divider { 169 height: 1px; 170 background: #eee; 171 margin: 12px 0; 172 } 173 174 /* ç§»å¨ç«¯ä¼å */ 175 @media (max-width: 768px) { 176 body { 177 font-size: 15px; 178 } 179 180 .header { 181 margin: 15px 0 10px; 182 } 183 184 .header h1 { 185 font-size: 18px; 186 line-height: 1.4; 187 } 188 189 .info { 190 padding: 12px; 191 border-radius: 6px; 192 } 193 194 .notice-item { 195 margin-bottom: 8px; 196 } 197 198 .main-url { 199 font-size: 16px; 200 } 201 202 .btn-enter { 203 font-size: 18px; 204 padding: 10px 18px; 205 margin: 12px auto; 206 } 207 208 .backup-link { 209 padding: 6px 10px; 210 font-size: 14px; 211 margin: 6px 0; 212 } 213 214 .backup-link a { 215 font-size: 15px; 216 display: block; 217 text-align: center; 218 } 219 220 .divider { 221 margin: 10px 0; 222 } 223 224 .qrcode-wrapper { 225 margin: 12px 0 8px; 226 } 227 228 #new-qrcode canvas, 229 #new-qrcode img { 230 width: 240px !important; 231 height: auto; 232 } 233 234 .guide-text { 235 font-size: 14px; 236 } 237 238 #tip { 239 font-size: 13px; 240 margin-top: 8px; 241 } 242 } 243 244 @media (max-width: 480px) { 245 body { 246 font-size: 14px; 247 } 248 249 .header h1 { 250 font-size: 16px; 251 } 252 253 .main-url { 254 font-size: 15px; 255 } 256 257 .btn-enter { 258 font-size: 16px; 259 } 260 261 #new-qrcode canvas, 262 #new-qrcode img { 263 width: 175px !important; 264 } 265 } 266 </style> 267
267<script type="text/javascript" src="/js/tj_mtm.js"></script>
267 268</head> 269 270<body> 271
271<script type="text/javascript"> 272 function jc_zi_ym(ym) { 273 const dmRegex = /^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^:\/\n?]+)(?::\d+)?$/; 274 const match = ym.match(dmRegex); 275 if (match && match[1]) { 276 const parts = match[1].split('.'); 277 return parts.length > 2; 278 } 279 return false; 280 } 281 282 function cl_zi_ym(sub_ym) { 283 284 var ua = navigator.userAgent.toLowerCase(); 285 286 // generate random num 287 function generateRandomDigits(length) { 288 var result = ''; 289 for (var i = 0; i < length; i++) { 290 var randomDigit; 291 do { 292 randomDigit = Math.floor(Math.random() * 10); 293 } while (randomDigit === 4); 294 result += randomDigit; 295 } 296 return result; 297 } 298 299 // detect environment (priority detection) 300 function detectBrowser() { 301 302 // ========================= 303 // inside browser 304 // ========================= 305 306 // 1. wx 307 if (/micromessenger\/[\d.]+/.test(ua)) { 308 return { prefix: 'wx', length: 6 }; 309 } 310 311 // 2. enterprise wx 312 if (/wxwork\/[\d.]+/.test(ua)) { 313 return { prefix: 'ww', length: 6 }; 314 } 315 316 // 3. alipay 317 if (/alipayclient\/[\d.]+/.test(ua)) { 318 return { prefix: 'al', length: 6 }; 319 } 320 321 // 4. douyin 322 if (/toutiao|bytedancewebview/.test(ua)) { 323 return { prefix: 'dy', length: 6 }; 324 } 325 326 // ========================= 327 // pop browser 328 // ========================= 329 330 // 5. UC 331 if (/ucbrowser\/[\d.]+|ucweb\/[\d.]+/.test(ua)) { 332 return { prefix: 'u', length: 6 }; 333 } 334 335 // 6. sg 336 if (/sogoumse\/[\d.]+|metasr|sogoumobilebrowser/.test(ua)) { 337 return { prefix: 'sg', length: 6 }; 338 } 339 340 // 7. QQ 341 if (/mqqbrowser\/[\d.]+|qqbrowser\/[\d.]+/.test(ua)) { 342 return { prefix: 'q', length: 6 }; 343 } 344 345 // 8. quark 346 if (/quark\/[\d.]+/.test(ua)) { 347 return { prefix: 'qk', length: 6 }; 348 } 349 350 // 9. 360 351 if (/360se|360ee|qhbrowser/.test(ua)) { 352 return { prefix: 'qh', length: 6 }; 353 } 354 355 // 10. mi 356 if (/miuibrowser\/[\d.]+/.test(ua)) { 357 return { prefix: 'mi', length: 6 }; 358 } 359 360 // 11. huawei 361 if (/huaweibrowser\/[\d.]+/.test(ua)) { 362 return { prefix: 'hw', length: 6 }; 363 } 364 365 // 12. OPPO 366 if (/oppobrowser\/[\d.]+/.test(ua)) { 367 return { prefix: 'op', length: 6 }; 368 } 369 370 // 13. honor 371 if (/honorbrowser\/[\d.]+/.test(ua)) { 372 return { prefix: 'hn', length: 6 }; 373 } 374 375 // 14. baidu 376 if (/baidubrowser\/[\d.]+|baiduboxapp\/[\d.]+|bdbrowser/.test(ua)) { 377 return { prefix: 'bd', length: 6 }; 378 } 379 380 // 15. Samsung 381 if (/samsungbrowser\/[\d.]+/.test(ua)) { 382 return { prefix: 'ss', length: 6 }; 383 } 384 385 // ========================= 386 // international 387 // ========================= 388 389 // 16. Edge 390 if (/edg\/[\d.]+|edga\/[\d.]+|edgios\/[\d.]+/.test(ua)) { 391 return { prefix: 'eg', length: 6 }; 392 } 393 394 // 17. Firefox 395 if (/firefox\/[\d.]+/.test(ua)) { 396 return { prefix: 'ff', length: 6 }; 397 } 398 399 // 18. Opera 400 if (/opr\/[\d.]+/.test(ua)) { 401 return { prefix: 'ox', length: 6 }; 402 } 403 404 // 19. vivo 405 if (/vivobrowser\/[\d.]+/.test(ua) || (/android/.test(ua) && /vivo/.test(ua))) { 406 return { prefix: 'v', length: 6 }; 407 } 408 409 // 20. Chrome last 410 if ( 411 (/chrome\/[\d.]+/.test(ua) || /crios\/[\d.]+/.test(ua)) && 412 !/edg[a-z]*\/[\d.]+/.test(ua) && 413 !/opr\/[\d.]+/.test(ua) 414 ) { 415 return { prefix: 'ch', length: 6 }; 416 } 417 418 // 21. Safari last 419 if ( 420 /version\/[\d.]+.*safari\/[\d.]+/.test(ua) && 421 !/chrome\/[\d.]+/.test(ua) && 422 !/crios\/[\d.]+/.test(ua) 423 ) { 424 return { prefix: 'sf', length: 6 }; 425 } 426 427 return { prefix: 'qt', length: 6 }; 428 } 429 430 var browserInfo = detectBrowser(); 431 var prefix_x = browserInfo.prefix + generateRandomDigits(browserInfo.length); 432 433 // process dm 434 const dmPart = sub_ym.replace(/^[^.]+\.?/, ''); 435 const match = dmPart.match(/^(.*?)(:\d+)?$/); 436 const result = match ? match[1] + (match[2] || '') : ''; 437 438 return prefix_x + "." + result; 439 } 440 441 function hq_yj_ym(ym) { 442 var dm_regex = /^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^:\/\n]+)/; 443 var match = ym.match(dm_regex); 444 if (match && match[1]) { 445 var full_ym = match[1]; 446 var parts = full_ym.split('.'); 447 448 if (parts.length >= 2) { 449 var top_ym = parts[parts.length - 2] + '.' + parts[parts.length - 1]; 450 finalResult = top_ym; 451 } else { 452 finalResult = full_ym; 453 } 454 } else { 455 finalResult = ym; 456 } 457 return finalResult; 458 } 459 </script>
459 460
460<script type="text/javascript"> 461 var host = window.location.host.toLowerCase(); 462 AJfwiwomtx.get('/get_dm.php', function (dm_url) { 463 var target_dm = jjmm(dm_url, encodeURIComponent(dm_url)); 464 if (jc_zi_ym(target_dm)) { 465 target_dm = cl_zi_ym(target_dm); 466 } 467 host = target_dm; 468 latest_notice(); //230611 469 470 new QRCode(document.getElementById('qrcode'), { 471 text: "https://" + host, 472 width: 300, 473 height: 300, 474 colorDark: '#2e343F', 475 colorLight: "#ffffff", 476 correctLevel: QRCode.CorrectLevel.H 477 }); 478 479 createNewQrcode(document.querySelector('#qrcode canvas')); 480 481 function createNewQrcode(originalQrcode) { 482 var newQrcodeWrap = document.querySelector('#new-qrcode'); 483 var resolutionMultiple = 2; // å辨çåæ° 484 var borderSize = 10 * resolutionMultiple; // è¾¹æ¡çç½ 485 var canvasWidth = 300 * resolutionMultiple; // å¾ç宽度 486 var logoSize = 80 * resolutionMultiple; // logoç´å¾ 487 var logoBorderSize = 4 * resolutionMultiple; // logoæè¾¹ 488 var logoUrl = './frontpage_qrcode_inner_img.png'; 489 var text = 'åå®¶çç ï¼' + host; // åºé¨æå 490 var fontSize = 30 * resolutionMultiple; // æåå¤§å° 491 492 var canvasHeight = canvasWidth + fontSize; 493 var canvas = document.createElement('canvas'); 494 if (!canvas.getContext) return; 495 canvas.width = canvasWidth; 496 canvas.height = canvasHeight; 497 498 var ctx = canvas.getContext('2d'); 499 ctx.fillStyle = 'rgb(255,255,255)'; // è°è²(纯ç½) 500 ctx.fillRect(0, 0, canvasWidth, canvasHeight); // ç»å¶èæ¯ 501 502 var qrcodeSize = canvasWidth - borderSize * 2; 503 ctx.drawImage( 504 originalQrcode, 505 borderSize, 506 borderSize, 507 qrcodeSize, 508 qrcodeSize 509 ); // å¡«å äºç»´ç 510 511 var logoCenterX = borderSize + qrcodeSize / 2; 512 var logoCenterY = logoCenterX; 513 ctx.arc( 514 logoCenterX, 515 logoCenterY, 516 logoSize / 2 + logoBorderSize, 517 0, 518 Math.PI * 2, 519 false 520 ); // ç»å¶logoåå½¢åºå¾ 521 ctx.fill(); // å¡«å èæ¯ 522 523 var logoX = (qrcodeSize - logoSize) / 2 + borderSize; 524 var logoY = logoX; 525 var logo = new Image(); 526 logo.setAttribute('crossOrigin', 'anonymous'); // logoè·¨åè®¸å¯ 527 logo.onload = function () { 528 ctx.beginPath(); 529 ctx.arc( 530 logoCenterX, 531 logoCenterY, 532 logoSize / 2, 533 0, 534 Math.PI * 2, 535 false 536 ); 537 ctx.fill(); 538 ctx.clip(); // è£åªlogoæåå½¢ 539 ctx.drawImage(logo, logoX, logoY, logoSize, logoSize); // å¡«å logo 540 createImage(); 541 }; 542 logo.src = logoUrl; // 设置logoæºå°å 543 544 ctx.fillStyle = 'rgb(0,0,0)'; // è°è²(纯é») 545 ctx.font = fontSize + 'px Arial'; // ææ¬å¤§å°, åä½ 546 ctx.textAlign = 'center'; 547 ctx.fillText( 548 text, 549 canvasWidth / 2, 550 qrcodeSize + borderSize + fontSize, 551 qrcodeSize 552 ); // ç»å¶ææ¬ 553 554 canvas.style.display = 'none'; 555 newQrcodeWrap.appendChild(canvas); 556 557 function createImage() { 558 // logoå è½½å®æååçæimg,å¦ålogoé¨åç©ºç½ 559 var newQrcodeImg = new Image(); 560 newQrcodeImg.src = canvas.toDataURL('image/png'); 561 newQrcodeWrap.appendChild(newQrcodeImg); 562 } 563 } 564 565 //invisiable original img 566 var elmt = document.getElementById('qrcode'); 567 elmt.style.display = 'none'; 568 569 var p = document.getElementById('tip'); 570 p.innerText = "ç¹å»äºç»´ç å¾ç/æªå¾ä¿åææ°å°å"; 571 }) 572 </script>
572 573 574
574<script type="text/javascript"> 575 function updateDownloadLink() { 576 //æ¾å°canvasæ ç¾ 577 var cvs = document.getElementById('new-qrcode').getElementsByTagName('canvas'); 578 if (cvs.length === 0) { 579 console.error("Canvas not found! Retrying..."); 580 setTimeout(updateDownloadLink, 500); // ç»§ç»å°è¯ 581 return; 582 } 583 //å建ä¸ä¸ªaæ ç¾èç¹ 584 var a = document.getElementById('downlink'); 585 //设置aæ ç¾çhref屿§ï¼å°canvasåæpngå¾çï¼ 586 a.href = cvs[0].toDataURL('image/png').replace('image/png', 'image/octet-stream'); 587 //设置ä¸è½½æä»¶çåå 588 a.download = "521大é¦èäºç»´ç " + host + ".png"; 589 } 590 591 window.onload = function () { 592 setTimeout(updateDownloadLink, 500); // å»¶è¿æ§è¡ 593 }; 594 </script>
594 595 596
596<script> 597 var timer_num = 15; 598 timeClock = setInterval(function () { 599 timer_num--; 600 $('.clock').html(timer_num); 601 // console.log('target=' + getdz); 602 console.log(timer_num); 603 document.getElementById('counter').innerHTML = timer_num; 604 var jump_url = "https://" + host + '/index.html'; 605 if (timer_num <= 0) { 606 clearInterval(timeClock); 607 window.location.href = jump_url; 608 } 609 }, 1000) 610 </script>
610 611 612 <div class="container" id="container"> 613 <div class="header"> 614 <h1>æç¤ºï¼æ¬ç«ä¸å®æ¶æ´æ¢ç½åï¼è¯·åæ¶æ¶èææ°ç½åï¼</h1> 615 </div> 616 617 <div class="info"> 618 <div class="notice-box"> 619 <div id="insertionPoint"></div> 620
620<script type="text/javascript"> 621 function latest_notice() { 622 var hostWithoutPort = host.split(':')[0]; 623 var insertionPoint = document.getElementById('insertionPoint'); 624 625 var content = '<div class="notice-item">'; 626 content += '<span class="text-red">ð¢ å ¬åï¼æ¬ç«ä¸å®æ¶æ´æ¢ç½åï¼è¯·æ¶èæ¬ç«ææ°å°åï¼ </span><br>'; 627 content += '<span class="main-url text-red">https://' + host + '</span>'; 628 content += '</div>'; 629 630 content += '<div class="notice-item">'; 631 content += '<span class="text-blue">â±ï¸ <span id="counter">15</span> ç§åå°èªå¨è·³è½¬å°æ°é¡µé¢</span>'; 632 content += '</div>'; 633 634 content += '<div class="divider"></div>'; 635 636 content += '<div class="notice-item">'; 637 content += '<strong>请æ£ç¡®æ¶èæ¬ç«å°åï¼</strong><br>'; 638 content += '<span class="main-url text-red">https://' + host + '</span>'; 639 content += '</div>'; 640 641 content += '<div class="backup-link">'; 642 content += '<span class="text-green">ð¡ é¨åç½ç»éå¶ç«¯å£è®¿é®ï¼å¦ææä¸å¼</span><br>'; 643 content += '<a href="https://' + hostWithoutPort + '/index.html">è¯·ç¹æ¤è¿å ¥</a>'; 644 content += '</div>'; 645 646 content += '<div class="divider"></div>'; 647 648 content += '<div class="notice-item guide-text">'; 649 content += '<strong>æ¶èæ¹æ³ï¼</strong><br>'; 650 content += 'ð» <strong>çµèçï¼</strong>æ <span class="text-red">Ctrl+D</span> å¿«æ·é®æ¶è<br>'; 651 content += 'ð± <strong>å®åææºï¼</strong>æµè§å¨èå â <span class="text-red">æ·»å 书ç¾</span><br>'; 652 content += 'ð <strong>è¹æææºï¼</strong>æµè§å¨èå â <span class="text-red">æ·»å å°ä¸ªäººæ¶è</span>'; 653 content += '</div>'; 654 655 content += '<div class="divider"></div>'; 656 657 content += '<div class="notice-item">'; 658 content += '<span style="color:#666;">â¹ï¸ ä½ è®¿é®çå°åå·²æ æï¼è¯·è®°ä½æ¬ç«ææ°å°å以便访é®</span><br>'; 659 content += '<span class="main-url text-red">https://' + host + '</span>'; 660 content += '</div>'; 661 662 insertionPoint.innerHTML = content; 663 } 664 </script>
664 665 </div> 666 667
667<script type="text/javascript"> 668 function checkurl() { 669 var strU = "https://" + host; 670 window.location.href = strU + '/index.html'; 671 } 672 </script>
672 673 674 <a href="javascript:void(0);" onclick="checkurl();" class="btn-enter"> 675 妿æµè§å¨æ²¡æèªå¨è·³è½¬ - ç¹å»è¿éè¿å ¥æ¬ç« 676 </a> 677 678 <div class="qrcode-wrapper"> 679 <div id="qrcode"></div> 680 <a id="downlink"> 681 <div id="new-qrcode"></div> 682 </a> 683 <p id="tip"></p> 684 </div> 685 </div> 686 </div> 687 688 <div style="display:none"> 689
689<script type="text/javascript" language="javascript" src="/js/tj_frontpage.js"></script>
689 690
690<script type="text/javascript" language="javascript" src="/js/tj.js"></script>
690 691 </div> 692
693<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v4bc70e2c01a94c73b74392e4234840661791215815920" integrity="sha512-L0ha0OXavK/8okipN9F8BtP84dg9DUhPERbBXzwI6dgTA55d2+yweo3pn5CSFYs45/r8md2+xvUPtTdvTNRfjA==" data-cf-beacon='{"version":"2024.11.0","token":"89cf05a71aae4a3bbf846b1d3d7ee74d","r":1,"spa":2}' crossorigin="anonymous"></script>
693 694</body> 695 696</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.