在页面上添加按钮,一键复制当前页面的所有localStorage数据
// ==UserScript==
// @name 复制页面localStorage工具
// @namespace http://tampermonkey.net/
// @version 0.2
// @description 在页面上添加按钮,一键复制当前页面的所有localStorage数据
// @author lisp
// @match *://*/*
// @grant GM_setClipboard
// @grant GM_notification
// @license none
// ==/UserScript==
(function() {
'use strict';
// 创建并添加按钮
function addCopyButton() {
// 移除已存在的按钮(如果存在)
const existingBtn = document.getElementById('copy-ls-btn');
if (existingBtn) {
existingBtn.remove();
}
// 创建新按钮
const btn = document.createElement('button');
btn.id = 'copy-ls-btn';
btn.textContent = '📋 复制 localStorage';
btn.style = `
position: fixed;
bottom: 20px;
right: 20px;
z-index: 9999;
padding: 10px 15px;
background: #4CAF50;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 14px;
box-shadow: 0 2px 5px rgba(0,0,0,0.2);
`;
// 添加悬停效果
btn.addEventListener('mouseover', () => {
btn.style.background = '#45a049';
});
btn.addEventListener('mouseout', () => {
btn.style.background = '#4CAF50';
});
// 按钮点击事件
btn.addEventListener('click', () => {
const data = {};
for (let i = 0; i < localStorage.length; i++) {
const key = localStorage.key(i);
data[key] = localStorage.getItem(key);
}
const script = `try {
const data = ${JSON.stringify(data, null, 2)};
console.log('开始导入 ' + Object.keys(data).length + ' 条数据...');
Object.keys(data).forEach(k => localStorage.setItem(k, data[k]));
console.log('✅ 导入完成');
} catch(e) {
console.error('❌ 导入失败:', e);
}
// localStorage 导入工具 (生成于 ${new Date().toLocaleString()})`;
// 使用油猴API复制到剪贴板(兼容不同版本的Tampermonkey)
try {
// 方法1:新版Tampermonkey返回Promise
if (GM_setClipboard(script).then) {
GM_setClipboard(script)
.then(() => showSuccess())
.catch(() => fallbackCopy(script));
}
// 方法2:旧版Tampermonkey不返回Promise
else {
GM_setClipboard(script, 'text');
showSuccess();
}
} catch (e) {
// 方法3:如果GM_setClipboard失败,回退到prompt方法
fallbackCopy(script);
}
});
document.body.appendChild(btn);
}
function showSuccess() {
if (typeof GM_notification !== 'undefined') {
GM_notification({
title: '复制成功',
text: '已复制localStorage导入代码到剪贴板!',
timeout: 2000
});
} else {
alert('已复制localStorage导入代码到剪贴板!');
}
}
function fallbackCopy(text) {
prompt('请手动复制以下代码到目标网页执行', text);
}
// 页面加载完成后添加按钮
if (document.readyState === 'complete' || document.readyState === 'interactive') {
setTimeout(addCopyButton, 1);
} else {
window.addEventListener('DOMContentLoaded', addCopyButton);
}
})();