Twitter - One Click Share + FixTweet

Copy FixTweet links with one click, removing tracking paramaters

  1. // ==UserScript==
  2. // @name Twitter - One Click Share + FixTweet
  3. // @namespace codeberg.org/skye
  4. // @homepageURL https://codeberg.org/skye/userscripts
  5. // @version 1.0.1
  6. // @description Copy FixTweet links with one click, removing tracking paramaters
  7. // @author freyja <freyja@dioxas.net>
  8. // @match https://*.twitter.com/*
  9. // @grant none
  10. // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAJkSURBVHgB7VZBbtpQEH3zIW0WVYuXVaH4Bs0NSk4AOUFhEarskhMknIDsqkKlcIT0BNAT1D1B3ZJK3dmVuirwp/MhVmzAxiagKBJv9+ePZ97M/JkxsMMODwzChlD84FWQp3MxeCDHAhiumB+MJrr1+8Ryw3p/9+H4DctfIPCq49Xlw8Kv99YlMuB19885gy/i7llziwGfFFWJyR02XzSCuwiBUse7BlFVaz5LS8KQVkRXaXRJsqImfDjKSZBNyzEyFWFKVJ4KFbWLElUao6KbSk8i9TXgTPaorxTskPwOxa7/9baGt4zg8oQbNyfWYJlRU0/KUx9ZwNwYNq1ecFRzl18QpW0bB0Ks//KjV1uwlbuLJA3GxEdh5wb5yGEPl3qMd2xecYQHKnlFlVLX95kxYCFKGg5IlU2a0uLpCM68LEJA+sJ/Dm6Jy3aMjQIRakRUm+UuvfOp/X34iQSejeFo0Hdx4optG5uFH/R+GHNvANcm3VtwLs+Lvy2TRwhIOnrYHhysIuDKcCDwGbYAjglOzQt+HssElF6dvoNNOZeuCSbfSgIGMjILMo4/ExZf7TqghNLmlwm1gpSC2tmaLAZMvWGz0Iu7XpqBm2NrQNN5cD+Y5ZOTdZyok3RZMusZOJUN+QZrQFb0oQkG6xIIYHe8A03Unx/Ryd6jS2ctAsbxmFRVynGKlM5na5ePVkUe0p+h9MmraS2zXqYgmSWjOPtElHbLTVB3Q79gqQlMScxqXpeav0UWiGMmXKSNOpZAAPvKs/U/1MRoxRxl+5WD+psUy2D5IdmRVoWjnqDnLlkyO+zwaPAf1zXwZL751PUAAAAASUVORK5CYII=
  11. // @license MIT
  12. // ==/UserScript==
  13.  
  14.  
  15. (function()
  16. {
  17. 'use strict';
  18. let id = 'fx-copy';
  19.  
  20. /* toast */
  21. const toast = document.createElement('div');
  22. toast.setAttribute('id', 'fx-toast');
  23. document.body.appendChild(toast);
  24. const showToast = (text) => {
  25. toast.innerText = text;
  26. toast.style.display = 'block';
  27. setTimeout(() => { toast.style.display = 'none' }, 1000);
  28. }
  29.  
  30. /* function + button */
  31. let make_button = function()
  32. {
  33. let button = document.createElement('button');
  34. button.textContent = 'FX';
  35. button.onclick = function ()
  36. {
  37. let url = new URL(button.closest('article').querySelector('[href*="status"]').href);
  38. url.pathname = url.pathname.split('/').slice(0,4).join('/');
  39. navigator.clipboard.writeText(url.toString().replace("twitter.com","fxtwitter.com"));
  40. showToast('Copied!');
  41. };
  42. button.id = id;
  43. return button;
  44. };
  45.  
  46. setInterval(function()
  47. {
  48. let nodes = document.querySelectorAll('article div[role=group]:last-child');
  49. for (let node of nodes)
  50. {
  51. if (!node.querySelector(`#${id}`))
  52. {
  53. node.appendChild(make_button());
  54. }
  55. }
  56. }, 250);
  57.  
  58. const style = document.createElement('style');
  59. style.innerText =
  60. /* css */
  61. `
  62. #fx-copy {
  63. border-color: transparent;
  64. border-radius: 50%;
  65. background: transparent;
  66. color: rgb(110, 118, 125);
  67. line-height: 20px;
  68. font-size: 1.1rem;
  69. margin: 3px;
  70. cursor: pointer;
  71. aspect-ratio: 1;
  72. }
  73. #fx-copy:hover {
  74. background: rgba(255, 227, 0, 0.1);
  75. color: rgb(255, 227, 0);
  76. }
  77.  
  78. #fx-toast {
  79. background: rgba(41, 50, 62, 0.6);
  80. padding: 1rem;
  81. font-family: sans-serif;
  82. font-size: 1.05rem;
  83. border-radius: 2rem;
  84. color: white;
  85. position: fixed;
  86. bottom: 4rem;
  87. left: 50%;
  88. transform: translate(-50%);
  89. display: none;
  90. }`;
  91. document.querySelector('head').appendChild(style);
  92. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址