您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Displays the dislike count on Invidious videos using a privacy preserving proxy to the Return YouTube Dislike API.
// ==UserScript== // @name Invidious Dislike Counter // @match *://*/watch?v=* // @connect ryd-proxy.kavin.rocks // @grant none // @version 1.0.0 // @author NoUser // @description Displays the dislike count on Invidious videos using a privacy preserving proxy to the Return YouTube Dislike API. // @run-at document-end // @grant GM.xmlHttpRequest // @grant GM_xmlhttpRequest // @namespace https://greasyfork.org/en/scripts/461909-invidious-dislike-counter // @homepage https://greasyfork.org/en/scripts/461909-invidious-dislike-counter // @license MIT // ==/UserScript== // This script is based on // https://codeberg.org/sun/userscripts/src/branch/main/user/ReturnInvidiousDislike.user.js // Instead of using the official Return YouTube Dislike API it uses a privacy // preserving proxy which can be found here: https://github.com/TeamPiped/RYD-Proxy (function () { "use strict"; const video = new URLSearchParams(window.location.search).get("v"); const likes = document.getElementById("likes")?.childNodes[1]; const dislikes = document.getElementById("dislikes")?.childNodes[1]; if (video) { GM.xmlHttpRequest({ url: "https://ryd-proxy.kavin.rocks/votes/" + video, onload: (response) => { const data = JSON.parse(response.responseText); if (dislikes) { dislikes.textContent = " " + data.dislikes.toLocaleString(); } else { const clone = likes.parentElement.cloneNode(true); const icon = clone.getElementsByClassName("icon")[0]; const text = clone.childNodes[1]; icon.classList.replace("ion-ios-thumbs-up", "ion-ios-thumbs-down"); text.textContent = " " + data.dislikes.toLocaleString(); likes.parentElement.insertAdjacentElement("afterend", clone); } }, }); } })();