805 字
4 分钟
BTC-Mini-Terminal:摸鱼盯盘两不误的浏览器小插件

想法#

盯盘这件事,有两个矛盾:

  1. 打开交易所 → 太显眼,不适合”摸鱼”
  2. 不打开交易所 → 不知道行情,心如猫抓

BTC-Mini-Terminal 是第三个选项——一个驻扎在浏览器左下角的小面板,刷新任何网页时它都在那里,安安静静显示 BTC 实时价格。点一下弹出迷你 K 线图,再点一下收回去。


架构设计#

为什么是油猴脚本#

方案优点缺点
Chrome 扩展权限大、独立运行开发成本高、审核慢
独立网页简单不能”跨站”显示
油猴脚本零配置、全站运行、用户一键安装受 GM API 限制

油猴脚本的方案是最轻量的——用户只需点一下”安装脚本”,之后访问任何网站都能看到 BTC 面板。

数据流#

Binance API ──┬── 成功 → 更新价格 + K 线数据
│
└── 失败 → CoinGecko API (fallback)
│
└── 失败 → 显示"API 不可用"
上次成功的数据继续展示

双 API 备份 + 优雅降级。币安被墙时自动切 CoinGecko,两个都挂了就用缓存数据,面板不白屏。


核心实现#

面板注入与隔离#

// 创建 Shadow DOM 隔离,避免与宿主页面样式冲突
const host = document.createElement('div');
host.id = 'btc-terminal-host';
document.body.appendChild(host);
const shadow = host.attachShadow({ mode: 'closed' });
// 所有 CSS 在 Shadow DOM 内部,100% 隔离

为什么用 Shadow DOM? 油猴脚本运行在任意网站上。如果不隔离样式,GitHub 的 CSS 可能会把你的面板搞成一团糟。{ mode: 'closed' } 防止宿主页面的 JS 意外操作面板 DOM。

K 线图渲染#

// Lightweight-Charts — 28KB gzipped
import { createChart } from 'lightweight-charts';
const chart = createChart(container, {
width: 320,
height: 200,
layout: {
background: { color: 'transparent' },
textColor: '#d1d5db',
},
grid: {
vertLines: { color: 'rgba(255,255,255,0.05)' },
horzLines: { color: 'rgba(255,255,255,0.05)' },
},
crosshair: { mode: 0 }, // 禁用十字线(小面板不需要)
});
const candleSeries = chart.addCandlestickSeries({
upColor: '#22c55e',
downColor: '#ef4444',
borderVisible: false,
wickUpColor: '#22c55e',
wickDownColor: '#ef4444',
});

选择 lightweight-charts 而非 TradingView Widget:

  • 体积小 10 倍
  • 无 iframe(性能更好)
  • 完全可控的样式

价格轮询策略#

let pollInterval = 5000; // 默认 5 秒
function smartPoll() {
const now = Date.now();
const lastUpdate = localStorage.getItem('btc_last_update');
// 如果用户刚切回来,立刻刷新
if (!lastUpdate || now - Number(lastUpdate) > pollInterval * 2) {
fetchPrice();
} else {
// 正常轮询
setTimeout(fetchPrice, pollInterval);
}
}
// 页面可见性变化时优化
document.addEventListener('visibilitychange', () => {
if (!document.hidden) smartPoll();
// hidden 时不轮询,省流量省 CPU
});

持久化配置#

键名 | 用途
btc_widget_candles | K 线点数 (50/100/200)
btc_widget_collapsed| 折叠状态 (1/0)
btc_widget_proxy | 可选 CORS 代理前缀

优先使用 GM_getValue/GM_setValue(油猴专用存储),回退到 localStorage。这样即使脚本被重新安装,用户设置也不会丢失。


设计决策#

  1. 左下角而非右上角: 右下角已经被系统通知/输入法占据;左下角是视觉”盲区”,放面板最不突兀
  2. 折叠默认: 首次安装后面板是折叠的——用户适应后再展开,降低骚扰感
  3. 无声音通知: 价格波动提醒用颜色闪烁,不打断用户。摸鱼的黄金法则——不引人注目

安装方式#

油猴脚本发布在 GreasyFork,一键安装。

源码: github.com/CHN-DST/BTC-Mini-Terminal · ⭐ 2

BTC-Mini-Terminal:摸鱼盯盘两不误的浏览器小插件
https://dst-blog.pages.dev/posts/2025-12-12-btc-mini-terminal/
作者
DST
发布于
2025-12-12
许可协议
CC BY-NC-SA 4.0