chaihongjun.me

docsify构建文档站点401页面

之前发布过文章《docsify简单配置应用》,使用docsify创建一个在线的文档网站,一般构建的网站是完全工公开的,但是也有可能这个文档站的内容需要授权才可访问。因此,优化这个站点构建功能,当未授权的时候禁止阅读。

接着前面文章的内容介绍,编写一个401页面,当用户退出的时候返回这个401页面。

<!DOCTYPE html>
<html>
<head>
    <title>已退出</title>
    <meta charset="utf-8">
    <style>
        body { font-family: Arial, sans-serif; text-align: center; padding: 50px; }
        h1 { color: #4CAF50; }
        a { color: #1976D2; text-decoration: none; margin-top: 20px; display: inline-block; }
        .loading { 
            display: none; 
            margin-top: 15px; 
            color: #666; 
            font-style: italic;
        }
    </style>
</head>
<body>
    <h1>已成功退出</h1>
    <p>您已安全退出系统,账户信息请勿外泄</p>
    <a href="/" id="homeLink">返回首页</a>
    <div class="loading" id="loading">正在刷新缓存,请稍候...</div>
    
    <script>
        document.getElementById('homeLink').addEventListener('click', function(e) {
            e.preventDefault();
            const link = this;
            const loading = document.getElementById('loading');
            
            // 显示加载状态
            link.style.opacity = '0.7';
            loading.style.display = 'block';
            
            // 1. 清除Service Worker缓存(如果存在)
            if ('serviceWorker' in navigator) {
                navigator.serviceWorker.getRegistrations()
                    .then(registrations => {
                        const promises = registrations.map(reg => reg.unregister());
                        return Promise.all(promises);
                    })
                    .catch(() => {});
            }
            
            // 2. 清除本地存储中可能影响首页的缓存
            try {
                localStorage.removeItem('homepage_cache');
                sessionStorage.clear();
            } catch (e) {}
            
            // 3. 关键优化:使用缓存策略强制刷新所有资源
            const timestamp = new Date().getTime();
            
            // 创建临时iframe用于预加载关键资源(可选,但更彻底)
            const preloadIframe = document.createElement('iframe');
            preloadIframe.style.display = 'none';
            preloadIframe.src = `/?t=${timestamp}&preload=1`;
            document.body.appendChild(preloadIframe);
            
            // 4. 确保所有清理操作完成后跳转
            setTimeout(() => {
                // 直接跳转到带时间戳的首页(双重保障)
                window.location.href = `/?t=${timestamp}`;
            }, 300); // 给清理操作留出时间
        });
    </script>
</body>

这样,当打卡文档页面的时候会提示用户输入登录信息,如果不输入则显示这个401页面,如果用户顺利退出登录,则也显示这个401页面,完美保护文档内容

知识共享许可协议本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。作者:柴宏俊»