您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds a button next to Pinterest pins, which opens the raw image or video of the pin in a new tab.
// ==UserScript== // @name Pinterest - Open Raw Image/Video // @namespace http://tampermonkey.net/ // @version 2025-08-04 // @description Adds a button next to Pinterest pins, which opens the raw image or video of the pin in a new tab. // @license MIT // @author provigz (Vankata453) // @match http*://www.pinterest.com/* // @icon https://www.google.com/s2/favicons?sz=64&domain=pinterest.com // @grant none // ==/UserScript== (function() { 'use strict'; function addOpenRawButton() { if (!location.pathname.startsWith("/pin/")) return; let openRawButton = document.querySelector("a#openRawButton"); if (openRawButton) return; let srcURL; const closeupContainer = document.querySelector("div[data-test-id='closeup-container']"); if (closeupContainer) { const images = closeupContainer.querySelectorAll("img"); if (images.length <= 0) return; let bestResImage = null; let maxImageArea = -1; for (const img of images) { const area = img.naturalWidth * img.naturalHeight; if (area > maxImageArea) { maxImageArea = area; bestResImage = img; } } srcURL = bestResImage.getAttribute("src"); } else { const videoSnippetScript = document.querySelector("script[data-test-id='video-snippet']"); if (!videoSnippetScript) return; try { const videoData = JSON.parse(videoSnippetScript.textContent); srcURL = videoData.contentUrl; if (!srcURL) return; } catch (err) { console.error('Failed to parse "video-snippet" JSON:', err); return; } } const shareButton = document.querySelector("div[data-test-id='share-button']"); if (!shareButton) return; openRawButton = document.createElement("a"); for (const attr of shareButton.attributes) { openRawButton.setAttribute(attr.name, attr.value); } openRawButton.appendChild(shareButton.firstChild.cloneNode(true)); openRawButton.id = "openRawButton"; openRawButton.removeAttribute("data-test-id"); openRawButton.setAttribute("href", srcURL); openRawButton.setAttribute("target", "_blank"); const iconSvg = openRawButton.querySelector("svg"); const iconDiv = iconSvg.parentNode; iconDiv.addEventListener("mouseenter", () => { iconDiv.style.backgroundColor = "rgba(239, 239, 235, 0.5)"; const tooltip = document.createElement("div"); tooltip.textContent = "Open Raw"; tooltip.style.position = "absolute"; tooltip.style.backgroundColor = "black"; tooltip.style.color = "white"; tooltip.style.padding = "10px 8px"; tooltip.style.borderRadius = "8px"; tooltip.style.boxShadow = "rgba(0, 0, 0, 0.2) 0px 3px 12px 0px"; tooltip.style.whiteSpace = "nowrap"; tooltip.style.transform = "translateX(-50%)"; tooltip.style.pointerEvents = "none"; tooltip.style.zIndex = "1000"; const rect = iconDiv.getBoundingClientRect(); tooltip.style.left = `${rect.left + rect.width / 2 + window.scrollX || window.pageXOffset}px`; tooltip.style.top = `${rect.bottom + 8 + window.scrollY || window.pageYOffset}px`; iconDiv._tooltip = tooltip; document.body.appendChild(tooltip); }); iconDiv.addEventListener("mouseleave", () => { iconDiv.style.backgroundColor = "white"; if (iconDiv._tooltip) { iconDiv._tooltip.remove(); iconDiv._tooltip = null; } }); const iconImg = document.createElement("img"); iconImg.setAttribute("src", "https://static.thenounproject.com/png/open-icon-2392341-512.png"); iconImg.style.width = "55%"; iconImg.style.height = "55%"; iconDiv.replaceChild(iconImg, iconSvg); shareButton.after(openRawButton); } const observer = new MutationObserver(addOpenRawButton); observer.observe(document.body, { childList: true }); })();