您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds a hovering download button in gallery pages on FurAffinity
- // ==UserScript==
- // @name FA Download Button
- // @namespace https://gist.github.com/dragantic
- // @version 0.2
- // @description Adds a hovering download button in gallery pages on FurAffinity
- // @author Dragantic
- // @match *://*.furaffinity.net/*
- // @icon https://www.google.com/s2/favicons?sz=64&domain=furaffinity.net
- // @grant GM_addStyle
- // @grant GM_download
- // ==/UserScript==
- (() => {
- 'use strict';
- GM_addStyle(
- `@keyframes fadein {
- 0% {opacity: 0;}
- 100% {opacity: 0.5;}
- }
- #fatabs {
- width: 60px !important;
- height: 60px !important;
- left: calc(50% - 30px);
- z-index: 2147483647;
- position: absolute;
- cursor: pointer;
- animation: fadein 0.1s;
- transition: 0.1s;
- filter: hue-rotate(240deg);
- background-color: black;
- opacity: 0.5;
- }
- #fatabs.hide {
- opacity: 0;
- }
- #fatabs:hover {
- opacity: 1;
- }
- *[data-fav] #fatabs {
- filter: hue-rotate(120deg);
- }
- *[data-fav='1'] #fatabs {
- filter: hue-rotate(0deg);
- }`);
- let img;
- let a;
- let fav;
- const btn = document.createElement('img');
- btn.id = 'fatabs';
- btn.src = 'data:image/svg+xml;base64,' + btoa( // From KDE's Breeze Dark theme
- `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24">
- <defs id="defs3051">
- <style type="text/css" id="current-color-scheme">
- .ColorScheme-Text { color:#ffff00; }
- </style>
- </defs>
- <g transform="translate(1,1)">
- <path style="fill:currentColor;fill-opacity:1;stroke:none" d="M 8 3 L 8 9 L 9 9 L 9 4 L 13 4 L 13 9 L 14 9 L 14 3 L 13 3 L 9 3 L 8 3 z M 5.7929688 10 L 5 10.816406 L 11 17 L 17 10.816406 L 16.207031 10 L 11 15.367188 L 5.7929688 10 z M 4 17 L 4 19 L 5 19 L 17 19 L 18 19 L 18 17 L 17 17 L 17 18 L 5 18 L 5 17 L 4 17 z " class="ColorScheme-Text"/>
- </g>
- </svg>`);
- btn.addEventListener('click', (e) => {
- const prev = fav;
- fav = +!fav;
- btn.title = (fav ? 'UnFav' : 'Fav') + ' Image';
- a.dataset.fav = fav.toString();
- fetch(a.href)
- .then((response) => response.text())
- .then((text) => {
- if (prev < 0) { // download
- const m = text.match(/(d\.furaffinity\.net\/.*?)"/);
- if (m) {
- const name = m[1].substring(m[1].lastIndexOf('/') + 1);
- GM_download({
- url: `https://${m[1]}`,
- name: name,
- onerror: (result) => { console.log(result); }
- });
- }
- }
- else { // (un)fav
- const m = text.match(new RegExp(`(/${prev ? 'un' : ''}fav/.*?)"`));
- m && fetch(`https://www.furaffinity.net${m[1]}`);
- }
- });
- e.preventDefault();
- });
- document.addEventListener('mouseover', (e) => {
- const t = e.target;
- if (t === btn) {
- return;
- }
- if (t instanceof HTMLImageElement
- && (t.offsetWidth >= 180 || t.offsetHeight >= 180)) {
- btn.className = '';
- if (img !== t) {
- const anc = t.closest('a');
- if (anc) {
- (a = anc).prepend(btn);
- img = t;
- fav = parseInt(a.dataset.fav || '-1');
- btn.title = (fav == -1 ? 'Download' :
- (fav == 0 ? 'Fav' : 'UnFav')) + ' Image';
- }
- }
- }
- else {
- btn.className = 'hide';
- }
- });
- })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址