您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Replace twitter redirection url (http://t.co/...) by the real URLs as to improve privacy.
当前为
// ==UserScript== // @name Canonical links // @author Guillaume // @description Replace twitter redirection url (http://t.co/...) by the real URLs as to improve privacy. // @namespace https://greasyfork.runtimutd.eu.org/fr/users/11386-guillaume // @include https://twitter.com/* // @version 1.1 // @grant none // @run-at document-start // @license CC by-sa http://creativecommons.org/licenses/by-sa/3.0/ // ==/UserScript== // Credits: // // - getVisibleText, textContentVisible: // This is derived from a work by Ethan Brown. // Original license: cc-by sa // Source: http://stackoverflow.com/questions/19985306/get-the-innertext-of-an-element-but-exclude-hidden-children function getVisibleText( node ) { if ( node.nodeType === 1 ) // Element { var rect = node.getBoundingClientRect(); if ( rect.width === 0 || rect.height === 0 ) return ''; } else if ( node.nodeType === 3 ) // Text { return node.textContent; } var text = ''; for( var i = 0; i < node.childNodes.length; i++ ) text += getVisibleText( node.childNodes[i] ); return text; } if ( ! Node.prototype.hasOwnProperty('textContentVisible') ) { Object.defineProperty(Node.prototype, 'textContentVisible', { get: function() { return getVisibleText( this ); }, enumerable: true }); } var makeLinkCanonical = function(el) { var text = document.createTextNode(el.textContentVisible); var url = el.dataset.expandedUrl; var newLink = document.createElement('a'); newLink.href = url; newLink.title = el.title; newLink.className = el.className; newLink.dir = el.dir; newLink.appendChild(text); el.parentNode.replaceChild(newLink, el); }; window.addEventListener("load", function(ev) { // unshadow for better debugging delete console.log; }, true); document.addEventListener("load", function(ev) { [].slice.call(document.querySelectorAll('a[data-expanded-url]')).forEach(makeLinkCanonical); }, true);