Greasy Fork

Greasy Fork is available in English.

当前页缓存/Cookie清理

全面清理页面各类存储数据

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         当前页缓存/Cookie清理
// @namespace    http://tampermonkey.net/
// @version      1.1
// @description  全面清理页面各类存储数据
// @author       Yearly
// @match        https://*/*
// @grant        GM_registerMenuCommand
// @grant        window.close
// @grant        window.focus
// @license  MIT
// @noframes
// ==/UserScript==

(function() {
    'use strict';

    async function clearAllStorage() {
        // 1. Web Storage API
        try {
            localStorage.clear();
            sessionStorage.clear();
            console.log('Web Storage已清理');
        } catch (e) {
            console.error('清理Web Storage失败:', e);
        }

        // 2. Cookies (包括HttpOnly cookies)
        try {
            const cookies = document.cookie.split(';');
            for (let cookie of cookies) {
                const eqPos = cookie.indexOf('=');
                const name = eqPos > -1 ? cookie.substr(0, eqPos).trim() : cookie.trim();
                // 尝试不同的路径和域名组合来清理cookies
                document.cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=/`;
                document.cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=/;domain=${window.location.hostname}`;
                document.cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=/;domain=.${window.location.hostname}`;
            }
            console.log('Cookies已清理');
        } catch (e) {
            console.error('清理Cookies失败:', e);
        }

        // 3. IndexedDB
        try {
            const dbs = await window.indexedDB.databases();
            for (const db of dbs) {
                window.indexedDB.deleteDatabase(db.name);
            }
            console.log('IndexedDB已清理');
        } catch (e) {
            console.error('清理IndexedDB失败:', e);
        }

        // 4. Web SQL Database (已废弃但某些浏览器可能还支持)
        try {
            if (window.openDatabase) {
                const db = window.openDatabase('test', '1.0', 'test', 2 * 1024 * 1024);
                db.transaction((tx) => {
                    // 清理所有表
                    tx.executeSql('SELECT * FROM sqlite_master WHERE type="table"', [], (tx, results) => {
                        for (let i = 0; i < results.rows.length; i++) {
                            tx.executeSql(`DROP TABLE ${results.rows.item(i).name}`);
                        }
                    });
                });
            }
            console.log('Web SQL Database已清理');
        } catch (e) {
            console.error('清理Web SQL Database失败:', e);
        }

        // 5. Cache Storage API
        try {
            if ('caches' in window) {
                const keys = await caches.keys();
                await Promise.all(keys.map(key => caches.delete(key)));
                console.log('Cache Storage已清理');
            }
        } catch (e) {
            console.error('清理Cache Storage失败:', e);
        }

        // 6. Application Cache (已废弃但可能存在)
        try {
            if (window.applicationCache) {
                window.applicationCache.swapCache();
                console.log('Application Cache已清理');
            }
        } catch (e) {
            console.error('清理Application Cache失败:', e);
        }

        // 7. Service Workers
        try {
            if ('serviceWorker' in navigator) {
                const registrations = await navigator.serviceWorker.getRegistrations();
                await Promise.all(registrations.map(reg => reg.unregister()));
                console.log('Service Workers已清理');
            }
        } catch (e) {
            console.error('清理Service Workers失败:', e);
        }

        // 8. File System API (如果可用)
        try {
            if (window.requestFileSystem || window.webkitRequestFileSystem) {
                const fs = window.requestFileSystem || window.webkitRequestFileSystem;
                fs(window.TEMPORARY, 1024*1024, function(fs) {
                    fs.root.getFiles(null, {}, function(entries) {
                        entries.forEach(function(entry) {
                            entry.remove(function() {}, function(error) {
                                console.error('删除文件失败:', error);
                            });
                        });
                    }, function(error) {
                        console.error('读取文件失败:', error);
                    });
                });
            }
            console.log('File System已清理');
        } catch (e) {
            console.error('清理File System失败:', e);
        }

        // 9. WebRTC Peer Connection
        try {
            const peerConnections = document.querySelectorAll('*').filter(el => el instanceof RTCPeerConnection);
            peerConnections.forEach(pc => pc.close());
            console.log('WebRTC连接已清理');
        } catch (e) {
            console.error('清理WebRTC连接失败:', e);
        }

        // 10. 清理内存缓存
        try {
            if (window.gc) {
                window.gc();
                console.log('内存已回收');
            }
        } catch (e) {
            console.error('内存回收失败:', e);
        }

        // 清理完成后的提示
        const result = confirm('所有存储数据已清理完成。');
        if (result) {
            window.stop();
            // 强制刷新页面,忽略缓存
          //  window.location.reload(true);
        }
    }

    // 注册清理命令到油猴菜单
    GM_registerMenuCommand('全面清理页面存储', clearAllStorage);
})();