您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
replace musky t.co links with actual links to actual web sites
// ==UserScript== // @name Unshortcut links on twitter.com // @description replace musky t.co links with actual links to actual web sites // @namespace Itsnotlupus Industries // @author itsnotlupus // @license MIT // @version 1.2.1 // @match https://twitter.com/* // @match https://platform.twitter.com/* // @grant none // @require https://gf.qytechs.cn/scripts/468394-itsnotlupus-tiny-utilities/code/utils.js?version=1247001 // @require https://gf.qytechs.cn/scripts/472943-itsnotlupus-middleman/code/middleman.js?version=1239323 // ==/UserScript== /* jshint esversion:11 */ log("This script is deprecated. Please switch to https://gf.qytechs.cn/en/scripts/474045-twitter-prime to continue getting updates."); function unshortcut(obj) { const map = {}; // 1st pass: gather associations between t.co and actual URLs (function populateURLMap(obj) { if (obj.url && obj.expanded_url) map[obj.url] = obj.expanded_url; Object.keys(obj).forEach(k => obj[k] && typeof obj[k] == "object" && populateURLMap(obj[k])); })(obj); // 2d pass: replace (almost) any string that contains a t.co string (function replaceURLs(obj) { Object.keys(obj).forEach(key => ({ string() { if (map[obj[key]] && key!=='full_text') obj[key] = map[obj[key]]; }, object() { if (obj[key] != null) replaceURLs(obj[key]); } }[typeof obj[key]]?.())); })(obj); return obj; } async function responseHandler(req, res, err) { return Response.json(unshortcut(await res.json()), { status: res.status, headers: res.headers }); } middleMan.addHook("https://twitter.com/i/api/graphql/*", { responseHandler }); middleMan.addHook("https://cdn.syndication.twimg.com/tweet-result?*", { responseHandler });
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址