UNPKG

hexo-safego-theme-switcher

Version:

✨ A Hexo plugin for safe external link redirection with base64 encoding, domain whitelisting, and support for a custom redirect page, now with light and dark mode switching.

127 lines (115 loc) 4.96 kB
<!DOCTYPE html> <html lang="zh"> <head> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="robots" content="noindex, nofollow"/> <title>页面加载中,请稍候...</title> <script type="text/javascript"> const now = new Date(); const beijingTime = new Date(now.getTime() + (now.getTimezoneOffset() + 480) * 60000); const hours = beijingTime.getHours(); console.log("北京时间:", hours); const link = document.createElement('link'); link.rel = 'stylesheet'; link.type = 'text/css'; if (hours >= 6 && hours < 18) { link.href = 'https://cdn.cbd.int/hexo-safego-theme-switcher/css/SafeGoLightModel.css'; console.log("加载白天模式样式表"); } else { link.href = 'https://cdn.cbd.int/hexo-safego-theme-switcher/css/SafeGoDarkModel.css'; console.log("加载夜间模式样式表"); } document.head.appendChild(link); console.log("样式表已添加:", link.href); const host = window.location.host; function GetQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); var r = window.location.search.substr(1).match(reg); return r ? decodeURI(r[2]) : null; } function base64Decode(input) { const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; let str = input.replace(/=+$/, ''); let output = ''; if (str.length % 4 == 1) { throw new Error("'atob' failed: The string to be decoded is not correctly encoded."); } for (let bc = 0, bs, buffer, idx = 0; buffer = str.charAt(idx++); ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer, bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0) { buffer = chars.indexOf(buffer); } return output; } var jump_url = GetQueryString('{{url_param_name}}'); {% if enable_base64_encode %} jump_url = base64Decode(jump_url); {% endif %} var UrlReg = '^((http|https|thunder|qqdl|ed2k|Flashget|qbrowser|ftp|rtsp|mms)://)'; if (!jump_url || !jump_url.match(UrlReg)) { document.title = '参数错误,正在返回首页...'; jump_url = location.origin; } let countdown = 5; let progressElement; let countdownElement; let jumpUrlElement; function updateCountdown() { countdownElement.textContent = countdown; progressElement.style.width = (countdown / 5 * 100) + '%'; if (countdown === 0) { jump(); } else { countdown--; setTimeout(updateCountdown, 1000); } } function jump() { location.href = jump_url; } function closeWindow() { window.opener = null; window.close(); } function loadAvatar() { const avatarImg = document.querySelector('.avatar'); const placeholder = document.querySelector('.avatar-placeholder'); const img = new Image(); img.src = '{{avatar}}'; img.onload = function() { avatarImg.src = img.src; avatarImg.style.display = 'block'; placeholder.style.display = 'none'; }; } window.onload = function() { loadAvatar(); progressElement = document.getElementById('progress'); countdownElement = document.getElementById('countdown'); jumpUrlElement = document.getElementById('jump-url'); jumpUrlElement.textContent = jump_url; updateCountdown(); } </script> </head> <body> <div class="avatar-placeholder"></div> <img src="" alt="头像" class="avatar"> <div class="description">{{title}}</div> <div class="subtitle">{{subtitle}}</div> <div class="loading"> <div class="content"> <div class="url-text">您即将离开本站,跳转到:</div> <div class="jump-url" id="jump-url"></div> </div> <div class="countdown-text">⚠ 将在 <span id="countdown">5</span> 秒后跳转,请自行确认链接安全性</div> <div class="progress-bar"> <div class="progress" id="progress"></div> </div> <div class="button-container"> <button class="button cancel-button" onclick="closeWindow()">取消跳转</button> <button class="button confirm-button" onclick="jump()">立即跳转</button> </div> </div> </body> </html>