您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Replaces x.com/twitter.com links with vxtwitter.com when copying a post link.
// ==UserScript== // @name X.com to VXTwitter Simple Replacer // @namespace http://tampermonkey.net/ // @version 2025-07-13 // @description Replaces x.com/twitter.com links with vxtwitter.com when copying a post link. // @author CrimsonTomato // @match https://x.com/* // @icon https://www.google.com/s2/favicons?sz=64&domain=x.com // @grant none // @license MIT // ==/UserScript== // Source code: https://github.com/CrimsonTomato/QOLTampering/blob/main/Twitter/shareReplacer.js /* jshint esversion: 8 */ (function() { 'use strict'; // Replace REPLACEMENT_DOMAIN with your domain of choice const REPLACEMENT_DOMAIN = 'vxtwitter.com'; // This function checks clipboard content and replaces the domain. async function modifyClipboard() { try { // 1. Read the original text from the clipboard. // 2. Use .trim() to remove any leading/trailing whitespace, including newlines. const originalText = (await navigator.clipboard.readText()).trim(); // Use a regular expression to find and replace the domain const newText = originalText.replace(/(x\.com|twitter\.com)/, REPLACEMENT_DOMAIN); // Only write to clipboard if a change was made if (originalText !== newText) { await navigator.clipboard.writeText(newText); console.log(`Tampermonkey: Replaced link in clipboard -> ${newText}`); } } catch (err) { // This can happen if the clipboard is empty or access is denied. console.error('Tampermonkey: Failed to read/write clipboard.', err); } } // Listen for clicks on the entire document to catch the share menu actions. document.addEventListener('click', (event) => { // The "Copy link" button is a div with role="menuitem" containing specific text. const menuItem = event.target.closest('div[role="menuitem"]'); if (menuItem && menuItem.textContent.includes('Copy link')) { // A short delay ensures the site's original copy action finishes first. setTimeout(modifyClipboard, 100); } }, true); // Use capture phase for reliability. })();