Files
testing-tool/content.js
T
雨霖铃 43ee47751b feat(sidepanel): 添加时间戳转换功能并优化默认状态
新增时间戳与日期时间相互转换的功能,包括输入框、选择器和转换按钮。
同时将侧边栏默认状态设为关闭,并完善相关样式和逻辑。
此外,增强复制功能的上下文检查以提升稳定性。
2025-11-12 22:31:00 +08:00

98 lines
2.8 KiB
JavaScript

(() => {
const SIDEBAR_ID = 'floating-sidebar';
const TOGGLE_ID = 'floating-toggle-btn';
// 若侧边栏已存在则移除
const existing = document.getElementById(SIDEBAR_ID);
const existingBtn = document.getElementById(TOGGLE_ID);
if (existing && existingBtn) {
existing.remove();
existingBtn.remove();
return;
}
// 创建 iframe
const iframe = document.createElement('iframe');
iframe.id = SIDEBAR_ID;
iframe.src = chrome.runtime.getURL('sidepanel/index.html');
Object.assign(iframe.style, {
position: 'fixed',
top: '0',
right: '0',
width: '360px',
height: '100%',
border: 'none',
zIndex: '2147483647',
boxShadow: '-4px 0 8px rgba(0,0,0,0.15)',
backgroundColor: 'white',
transform: 'translateX(100%)', // 默认关闭状态
transition: 'transform 0.3s ease',
});
document.body.appendChild(iframe);
// 创建控制按钮
const toggleBtn = document.createElement('div');
toggleBtn.id = TOGGLE_ID;
toggleBtn.textContent = '≡';
Object.assign(toggleBtn.style, {
position: 'fixed',
bottom: '20px',
right: '20px',
width: '48px',
height: '48px',
backgroundColor: '#0078d7',
color: 'white',
borderRadius: '50%',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
fontSize: '22px',
cursor: 'pointer',
boxShadow: '0 2px 6px rgba(0,0,0,0.3)',
zIndex: '2147483648',
transition: 'background-color 0.2s ease',
});
toggleBtn.addEventListener('mouseenter', () => {
toggleBtn.style.backgroundColor = '#005fa3';
});
toggleBtn.addEventListener('mouseleave', () => {
toggleBtn.style.backgroundColor = '#0078d7';
});
document.body.appendChild(toggleBtn);
// 折叠 / 展开逻辑
let visible = false; // 默认关闭状态
toggleBtn.addEventListener('click', () => {
visible = !visible;
iframe.style.transform = visible ? 'translateX(0)' : 'translateX(100%)';
});
// 如果使用 window.postMessage
window.addEventListener('message', function (event) {
// 检查消息来源是否可信 (非常重要!)
if (event.origin !== 'chrome-extension://njacfkelcmfnpdbnbkpenogmokmglkcn') {
return;
}
if (event.data.action === 'closeSidebar') {
console.log('Received closeSidebar message');
visible = !visible;
iframe.style.transform = visible ? 'translateX(0)' : 'translateX(100%)';
}
});
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
if (message.action === 'copyText') {
navigator.clipboard
.writeText(message.data)
.then(() => sendResponse({ success: true }))
.catch((err) => {
console.error('❌ 复制失败:', err);
sendResponse({ success: false, error: err });
});
return true;
}
});
})();