您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds download button for image post in reddit
- // ==UserScript==
- // @name Reddit Image Downloader
- // @namespace http://tampermonkey.net/
- // @version 2024-09-12
- // @description Adds download button for image post in reddit
- // @author FlinCode
- // @match https://www.reddit.com/r/*/comments/*
- // @icon https://www.google.com/s2/favicons?sz=64&domain=reddit.com
- // @grant none
- // @license MIT
- // ==/UserScript==
- (function() {
- 'use strict';
- const img = document.getElementById("post-image")
- if (img) {
- const items = img.srcset.split(",").map(item => item.trim())
- const imgSrc = items[items.length - 1]
- console.log(imgSrc)
- addUrls([imgSrc])
- } else {
- const imgs = document.getElementsByClassName("media-lightbox-img")
- let urls = []
- for (let i = 0; i < imgs.length; i++) {
- const img = imgs[i]
- const items = img.srcset.split(",").map(item => item.trim())
- const imgSrc = items[items.length - 1]
- urls.push(imgSrc)
- console.log("Image: " + i, imgSrc)
- }
- addUrls(urls)
- }
- function addUrls(urls) {
- const box = querySelectorAllShadows("shreddit-post")[0]
- // add url buttons to download
- urls.forEach((url, idx) => {
- url = convertUrl(url)
- const a = document.createElement("a")
- a.innerHTML = "Download " + (idx + 1)
- a.href = url
- a.download = url.split("/").pop()
- a.target = "_blank"
- a.className = "button-bordered button-small button join-btn leading-none min-w-[100px]"
- a.style.padding = "9px";
- a.style.textDecoration = "none"
- a.style.marginLeft = "5px"
- box.appendChild(a)
- });
- }
- // https://i.redd.it/file-name.jpeg
- function convertUrl(url) {
- let base = "https://i.redd.it/";
- const u = new URL(url)
- const stem = u.pathname.split("v0-").pop()
- return base + stem
- }
- function querySelectorAllShadows(selector, el = document.body) {
- const childShadows = Array.from(el.querySelectorAll('*')).
- map(el => el.shadowRoot).filter(Boolean);
- const childResults = childShadows.map(child => querySelectorAllShadows(selector, child));
- const result = Array.from(el.querySelectorAll(selector));
- return result.concat(childResults).flat();
- }
- })();