您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds two buttons at the top of the status page on Twitter to easily copy an fxtwitter or fixupx url
当前为
// ==UserScript== // @name Copy fxtwitter or fixupx link buttons // @name:es Botones de copiar enlace de fxtwitter o fixupx // @namespace http://tampermonkey.net/ // @version 1.0.1 // @description Adds two buttons at the top of the status page on Twitter to easily copy an fxtwitter or fixupx url // @description:es Añade dos botones en la parte superior de las páginas de tweets para copiar enlaces fxtwitter o fixupx fácilmente // @author LuisAlfredo92 // @match *x.com/* // @match *twitter.com/* // @icon https://www.google.com/s2/favicons?sz=64&domain=x.com // @grant none // @license GPL3 // @supportURL https://github.com/LuisAlfredo92/copy-fxtwitter-or-fixupx-link-buttons // ==/UserScript== (function () { 'use strict'; var re = new RegExp(".*(x.com|twitter.com)\/.+\/status\/.+"); var exists = false; // Function to change url function modifyAndSaveUrl(type) { // Get URL const currentUrl = window.location.href; const isTwitter = currentUrl.includes("twitter.com"); var modifiedUrl = ""; if (type === "t") { modifiedUrl = currentUrl.replace(isTwitter ? "twitter.com" : "x.com", "fxtwitter.com"); } else { modifiedUrl = currentUrl.replace(isTwitter ? "twitter.com" : "x.com", "fixupx.com"); } // Copy to url navigator.clipboard.writeText(modifiedUrl) .then(() => console.log("Modified URL copied to clipboard: ", modifiedUrl)) .catch((ex) => console.error("Failed to copy the modified URL: ", ex)); } // Function to create buttons function createButton(label, type) { const button = document.createElement("BUTTON"); button.appendChild(document.createTextNode(label)); button.addEventListener("click", () => modifyAndSaveUrl(type) ); button.style.flexGrow = "1"; button.style.textAlign = "center"; button.style.fontFamily = "TwitterChirp"; button.style.border = "none"; button.style.borderRadius = "25px"; button.style.padding = "10px 0px"; button.style.fontWeight = "bold"; return button; } const callback = (mutationList) => { // Check if the current page is a tweet const currentUrl = window.location.href; if(!re.test(currentUrl)) return; for (const mutation of mutationList) { if(mutation.type !== "attributes") return; // Checks if the buttons doesn't already exist if(exists) { const existingContainers = document.querySelectorAll("#fxtwitterFixupxButtons"); if(existingContainers.length != 0) return; exists = false; } const containers = document.querySelectorAll(".css-175oi2r.r-1iusvr4.r-16y2uox.r-ttdzmv"); if(containers.length == 0) return; // Create container and changes its style const container = document.createElement("DIV"); container.id = "fxtwitterFixupxButtons"; container.style.marginBottom = "15px"; container.style.display = "flex"; container.style.flexDirection = "row"; container.style.gap = "10px"; // Add buttons container.appendChild(fxtwitterButton); container.appendChild(fixupxButton); // Insert container containers[0].prepend(container); exists = true; } }; // Create buttons const fxtwitterButton = createButton("Copy fxtwitter link", "t"); const fixupxButton = createButton("Copy fixupx link", "x"); // Displays the buttons when the page is correctly loaded // Options for the observer (which mutations to observe) const config = { attributes: true, subtree: true }; // Create an observer instance linked to the callback function const observer = new MutationObserver(callback); // Start observing the target node for configured mutations observer.observe(document, config); })();