// ==UserScript== // @name 我的推特工具箱 // @namespace https://greasyfork.org/users/159546 // @version 1.0.5 // @description 视频兼容修复。查看用户的永久链接。 // @author LEORChn // @include *://twitter.com/* // @run-at document-start // @grant GM_xmlhttpRequest // @connect download-twitter-videos.com // @downloadURL https://update.greasyfork.icu/scripts/381019/%E6%88%91%E7%9A%84%E6%8E%A8%E7%89%B9%E5%B7%A5%E5%85%B7%E7%AE%B1.user.js // @updateURL https://update.greasyfork.icu/scripts/381019/%E6%88%91%E7%9A%84%E6%8E%A8%E7%89%B9%E5%B7%A5%E5%85%B7%E7%AE%B1.meta.js // ==/UserScript== var IntervalTime = 2000; function onIntervalFunction(){ //doAddEntry(); // 隐藏转推。不稳定,如有需要请自行取消注释 //doHideRetweet(); // 隐藏转推。不稳定,如有需要请自行取消注释 doAddVideoEntry(); doAddUidViewer(); // 用户资料:永久链接 adaptDoublePhotoHeight(); doFixImageView(); } var ID_HIDE_RETWEET_ENTRY = 'leorchn_action_hide_retweet', HIDE_RETWEET_ENABLED = false, HIDE_RETWEET_ENABLED_V2019 = false; function doAddEntry(){ if(fv(ID_HIDE_RETWEET_ENTRY)) return; var bar = $('.ProfileHeading-toggle'); var li = ct('li'), a = ct('a', '隐藏转推'); if(bar){ // 新布局,登录后强制启用的那种(不知道怎么返回旧布局,新布局真的用着太难过了) li.className='ProfileHeading-toggleItem u-textUserColor'; a.className='ProfileHeading-toggleLink js-nav'; a.onclick=function(){ this.parentNode.className='ProfileHeading-toggleItem is-active'; this.outerHTML=this.innerText; HIDE_RETWEET_ENABLED = true; }; li.appendChild(a); }else{ // 旧布局 bar = $('[aria-hidden]+div[role=tablist]'); if(!bar) return; // 真的不知道是什么布局了,return li = bar.lastElementChild.cloneNode(true); a = li.lastElementChild; a.removeAttribute('href'); a.onclick=function(){ this.lastElementChild.style.color = 'rgb(29, 161, 242)'; HIDE_RETWEET_ENABLED = HIDE_RETWEET_ENABLED_V2019 = true; }; var span = li; while(span.lastElementChild != null) span = span.lastElementChild; span.innerText = '隐藏转推'; } li.id = ID_HIDE_RETWEET_ENTRY; bar.appendChild(li); } function doHideRetweet(){ if( ! HIDE_RETWEET_ENABLED ) return; try{ var retweets = fc('js-retweet-text'); while(retweets.length > 0)retweets[0].parentNode.parentNode.parentNode.parentNode.remove(); }catch(e){ pl(e); } if( ! HIDE_RETWEET_ENABLED_V2019) return; var tweetRoot, tweetRoot2, retweets19 = $$('article:not([isHideRetweet])'), alignH, retweetMarkRoot; try{ for(var i=0; i]*\\.mp4[0-9a-zA-Z\?=%]{0,}','g'), rsl=reg.exec(res); pl(res); pl(rsl); v.autoplay = v.loop = v.controls = true; v.src = rsl[0]; v.style.height = '100%'; v.volume = 0.6; }); return false; // 鼠标放在文字上时,浏览器左下角显示原帖地址(但是并不是用于点击后跳转,所以return false) } v.onplay = function(){ if(a) a.remove(); } v.onclick = function(e){ if(v.duration == 0) return; if(v.paused) v.play(); else v.pause(); e.stopPropagation(); } } function getTweetsURL(element){ // 获取当前视频元素所在的帖子的真实URL var url = null, testcase = /[^\/]*?\/status\/[0-9]*/; // 一个用于测试是否是具体帖子URL的用例。【[用户ID]/status/[帖子ID_数字]】 var testReplyRootUrl = (function(e){ /* 已测试: 进入一个回复帖页面,原帖中包含的视频 https://twitter.com/LEORChn/status/1230184640842829825 进入一个主题帖页面,原帖和回复帖均包含视频 https://twitter.com/Chisen_Lupus/status/1229804782589706240 进入一个帐号的空间页面,切换到“媒体”选项卡之后看到的每一个视频 */ var links = e.parentNode.parentNode.parentNode.firstElementChild.querySelectorAll('a'); for(var i=0; i