LKML 內文複製器

一鍵複製 lkml.org 信件正文到剪貼簿。

目前為 2025-06-06 提交的版本,檢視 最新版本

// ==UserScript==
// @name         LKML 內文複製器
// @namespace    https://abc0922001.github.io/lkml-userscripts
// @version      1.1
// @description  一鍵複製 lkml.org 信件正文到剪貼簿。
// @author       abc0922001
// @match        https://lkml.org/lkml/*
// @grant        none
// @license      MIT
// ==/UserScript==

(() => {
  'use strict';

  /** 等待指定元素出現 */
  function waitForElement(selector, timeout = 5000) {
    return new Promise((resolve, reject) => {
      const hit = document.querySelector(selector);
      if (hit) return resolve(hit);

      const ob = new MutationObserver(() => {
        const el = document.querySelector(selector);
        if (el) {
          ob.disconnect();
          resolve(el);
        }
      });

      ob.observe(document.body, { childList: true, subtree: true });

      setTimeout(() => {
        ob.disconnect();
        reject(new Error(`等待元素「${selector}」超時(${timeout}ms)`));
      }, timeout);
    });
  }

  /** 提示訊息 */
  const showAlert = msg => window.alert(msg);

  /** 複製到剪貼簿 */
  function copyToClipboard(txt) {
    navigator.clipboard.writeText(txt)
      .then(() => showAlert('✅ 內文已複製到剪貼簿!'))
      .catch(err => showAlert(`❌ 複製失敗:${err.message}`));
  }

  /** 建立按鈕 */
  function createCopyButton() {
    const btn = document.createElement('button');
    btn.textContent = '📋 複製內文';
    Object.assign(btn.style, {
      position: 'fixed',
      top: '10px',
      right: '10px',
      zIndex: 1000,
      padding: '6px 10px',
      fontSize: '14px',
      backgroundColor: '#2b7de9',
      color: '#fff',
      border: 'none',
      borderRadius: '4px',
      cursor: 'pointer'
    });

    btn.addEventListener('click', () => {
      const selector = 'pre[itemprop="articleBody"]';
      waitForElement(selector)
        .then(el => copyToClipboard(el.textContent))   // 要 HTML 改成 el.innerHTML
        .catch(() => showAlert('⚠️ 找不到內文區塊。'));
    });

    document.body.appendChild(btn);
  }

  /* 🚀 啟動 */
  createCopyButton();
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址