您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Replace twitter redirection url (http://t.co/...) by the real URLs as to improve privacy.
当前为
- // ==UserScript==
- // @name Canonical links
- // @description Replace twitter redirection url (http://t.co/...) by the real URLs as to improve privacy.
- // @author Guillaume
- // @namespace https://greasyfork.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, and 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);