QuickDownloader

根据不同的网站添加下载功能的按钮

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         QuickDownloader
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  根据不同的网站添加下载功能的按钮
// @match        *://*.amazon.com/*
// @match        *://*.amazon.co.uk/*
// @match        *://*.amazon.de/*
// @match        *://*.amazon.fr/*
// @match        *://*.amazon.it/*
// @match        *://*.amazon.es/*
// @match        *://*.amazon.ca/*
// @match        *://*.amazon.co.jp/*
// @match        *://*.amazon.cn/*
// @match        *://*.amazon.in/*
// @match        *://*.amazon.com.br/*
// @match        *://*.amazon.com.mx/*
// @match        *://*.amazon.com.au/*
// @match        *://*.amazon.nl/*
// @match        *://*.amazon.sg/*
// @match        *://*.goodreads.com/*
// @match        *://*.douban.com/*
// @grant        GM_addStyle
// @grant        GM_getValue
// @grant        GM_setValue
// @require      https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/js/all.min.js
// 添加 Font Awesome CSS
// @resource     fontawesome https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css
// @license      MIT
// ==/UserScript==

(function () {
  "use strict";

  // 兼容性层
  const getValue = (key, defaultValue) => {
    if (typeof GM_getValue === "function") {
      return GM_getValue(key, defaultValue);
    }
    const value = localStorage.getItem(key);
    return value === null ? defaultValue : value;
  };

  const setValue = (key, value) => {
    if (typeof GM_setValue === "function") {
      GM_setValue(key, value);
    } else {
      localStorage.setItem(key, value);
    }
  };

  // 检查当前URL并决定行为
  function checkUrlAndAct() {
    const currentUrl = window.location.href;
    if (currentUrl.includes("amazon")) {
      return handleAmazonDownload();
    } else if (currentUrl.includes("goodreads.com")) {
      return handleGoodreadsDownload();
    } else if (currentUrl.includes("douban.com")) {
      return handleDoubanDownload();
    }
    // 可以继续添加其他网站的处理函数
  }

  // 处理亚马逊网站的下载
  function handleAmazonDownload() {
    const button = createButton("下载书籍", "fa-download");
    button.addEventListener("click", function () {
      const params = extractAmazonParams();
      const targetUrl = buildTargetUrl(params);
      window.open(targetUrl, "_blank");
    });
    insertButton(button);
  }

  // 处理Goodreads网站的下载
  function handleGoodreadsDownload() {
    const button = createButton("下载书籍", "fa-download");
    button.addEventListener("click", function () {
      const bookTitle = extractGoodreadsBookTitle();
      const params = encodeURIComponent(bookTitle);
      const targetUrl = buildTargetUrl(params);
      window.open(targetUrl, "_blank");
    });
    insertButton(button);
  }

  // 处理豆瓣网站的下载
  function handleDoubanDownload() {
    const button = createButton("下载书籍", "fa-download");
    button.addEventListener("click", function () {
      const bookTitle = extractDoubanBookTitle();
      const params = encodeURIComponent(bookTitle);
      const targetUrl = buildTargetUrl(params);
      window.open(targetUrl, "_blank");
    });
    insertButton(button);
  }

  // 创建按钮
  function createButton(title, iconClass) {
    const button = document.createElement("button");
    button.innerHTML = `<i class="fas ${iconClass}"></i>`;
    button.title = title;
    button.style.display = "inline-block";
    button.style.marginLeft = "10px";
    button.style.background = "none";
    button.style.border = "none";
    button.style.fontSize = "24px";
    button.style.color = "#0066c0";
    button.style.cursor = "pointer";
    button.style.verticalAlign = "middle";
    return button;
  }

  // 从亚马逊页面提取参数
  function extractAmazonParams() {
    const productTitle = document
      .querySelector("#productTitle")
      ?.textContent.trim();
    return encodeURIComponent(productTitle);
  }

  // 从Goodreads页面提取书名
  function extractGoodreadsBookTitle() {
    const bookTitle = document.querySelector("h1")?.textContent.trim();
    return bookTitle || "";
  }

  // 从豆瓣页面提取书名
  function extractDoubanBookTitle() {
    const bookTitle = document.querySelector("h1 span")?.textContent.trim();
    return bookTitle || "";
  }

  // 构建目标URL
  function buildTargetUrl(params) {
    const baseUrl = getValue("targetBaseUrl", "https://zh.singlelogin.re/s/");
    return `${baseUrl}${params}?`;
  }

  // 插入按钮到指定位置
  function insertButton(button) {
    let targetElement;
    if (window.location.href.includes("amazon")) {
      targetElement = document.querySelector("#productTitle");
    } else if (window.location.href.includes("goodreads.com")) {
      targetElement = document.querySelector("h1");
    } else if (window.location.href.includes("douban.com")) {
      targetElement = document.querySelector("h1 span");
    }

    if (targetElement) {
      targetElement.style.display = "inline-block";
      targetElement.style.marginRight = "10px";
      targetElement.parentNode.insertBefore(button, targetElement.nextSibling);
    } else {
      console.error("未找到插入按钮的目标元素");
    }
  }

  // 设置配置的函数
  function setConfig() {
    const newBaseUrl = prompt(
      "请输入新的基础 URL:",
      getValue("targetBaseUrl", "https://zh.singlelogin.re/s/")
    );
    if (newBaseUrl !== null) {
      setValue("targetBaseUrl", newBaseUrl);
      alert("基础 URL 已更新!");
    }
  }

  // 主函数
  function main() {
    checkUrlAndAct();

    const configButton = createButton("设置下载地址", "fa-cog");
    configButton.addEventListener("click", setConfig);
    insertButton(configButton);
  }

  // 运行主函数
  main();
})();