您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
ツイートの下にエンゲージメント画面に飛ぶリンクを追加します。結構自分用。
// ==UserScript== // @name Twitter Engagement Button // @namespace http://tampermonkey.net/ // @version 0.9 // @description ツイートの下にエンゲージメント画面に飛ぶリンクを追加します。結構自分用。 // @author sambaquiz // @match https://twitter.com/* // @match https://mobile.twitter.com/* // @match https://pbs.twimg.com/media/* // @icon https://www.google.com/s2/favicons?sz=64&domain=twitter.com // @license MIT // @grant none // ==/UserScript== const EB = (function() { 'use strict'; return { inject: function (article) { if (article.getAttribute('data-testid') === 'tweet') { let wrapper = document.createElement('div'); wrapper.style.marginTop = '15px'; wrapper.style.display = 'flex'; const username = article.querySelector('a[href*="/status/"]').href.split('/')[3]; const statusId = article.querySelector('a[href*="/status/"]').href.split('/status/').pop().split('/').shift(); { let engagementButtonDiv = document.createElement('div'); engagementButtonDiv.style.marginRight = '30px'; let engagementButton = document.createElement('a'); engagementButton.className = 'engagementButton r-a023e6 css-18t94o4'; engagementButton.href = `/${username}/status/${statusId}/quotes`; engagementButton.target= '_blank'; engagementButton.style.color = 'inherit'; engagementButton.style.textDecoration = 'none'; engagementButton.addEventListener('mouseover', function() { this.style.textDecoration = 'underline'; }); engagementButton.addEventListener('mouseout', function() { this.style.textDecoration = 'none'; }); engagementButton.style.marginLeft = '5px'; engagementButton.textContent = `Quote`; let svg = document.createElement('svg'); svg.style.float = 'left'; svg.innerHTML = ` <svg viewBox="0 0 24 24" aria-hidden="true" class="r-18jsvk2 r-4qtqp9 r-yyyyoo r-1q142lx r-1xvli5t r-dnmrzs r-bnwqim r-lrvibr"> <g> <path d="M8.75 21V3h2v18h-2zM18 21V8.5h2V21h-2zM4 21l.004-10h2L6 21H4zm9.248 0v-7h2v7h-2z"></path> </g> </svg> `; engagementButton.appendChild(svg); engagementButtonDiv.appendChild(engagementButton); wrapper.appendChild(engagementButtonDiv); } { let retweetEngagementButtonDiv = document.createElement('div'); retweetEngagementButtonDiv.style.marginRight = '30px'; let retweetEngagementButton = document.createElement('a'); retweetEngagementButton.className = 'engagementButton r-a023e6 css-18t94o4'; retweetEngagementButton.href = `/${username}/status/${statusId}/retweets`; retweetEngagementButton.target= '_blank'; retweetEngagementButton.style.color = 'inherit'; retweetEngagementButton.style.textDecoration = 'none'; retweetEngagementButton.addEventListener('mouseover', function() { this.style.textDecoration = 'underline'; }); retweetEngagementButton.addEventListener('mouseout', function() { this.style.textDecoration = 'none'; }); retweetEngagementButton.style.marginLeft = '5px'; retweetEngagementButton.textContent = `RT`; let svg = document.createElement('svg'); svg.style.float = 'left'; svg.innerHTML = ` <svg viewBox="0 0 24 24" aria-hidden="true" class="r-18jsvk2 r-4qtqp9 r-yyyyoo r-1q142lx r-1xvli5t r-dnmrzs r-bnwqim r-lrvibr"> <g> <path d="M8.75 21V3h2v18h-2zM18 21V8.5h2V21h-2zM4 21l.004-10h2L6 21H4zm9.248 0v-7h2v7h-2z"></path> </g> </svg> `; retweetEngagementButton.appendChild(svg); retweetEngagementButtonDiv.appendChild(retweetEngagementButton); wrapper.appendChild(retweetEngagementButtonDiv); } { let likesEngagementButtonDiv = document.createElement('div'); likesEngagementButtonDiv.style.marginRight = '30px'; let likesEngagementButton = document.createElement('a'); likesEngagementButton.className = 'engagementButton r-a023e6 css-18t94o4'; likesEngagementButton.href = `/${username}/status/${statusId}/likes`; likesEngagementButton.target= '_blank'; likesEngagementButton.style.color = 'inherit'; likesEngagementButton.style.textDecoration = 'none'; likesEngagementButton.addEventListener('mouseover', function() { this.style.textDecoration = 'underline'; }); likesEngagementButton.addEventListener('mouseout', function() { this.style.textDecoration = 'none'; }); likesEngagementButton.style.marginLeft = '5px'; likesEngagementButton.textContent = `Like`; let svg = document.createElement('svg'); svg.style.float = 'left'; svg.innerHTML = ` <svg viewBox="0 0 24 24" aria-hidden="true" class="r-18jsvk2 r-4qtqp9 r-yyyyoo r-1q142lx r-1xvli5t r-dnmrzs r-bnwqim r-lrvibr"> <g> <path d="M8.75 21V3h2v18h-2zM18 21V8.5h2V21h-2zM4 21l.004-10h2L6 21H4zm9.248 0v-7h2v7h-2z"></path> </g> </svg> `; likesEngagementButton.appendChild(svg); likesEngagementButtonDiv.appendChild(likesEngagementButton); wrapper.appendChild(likesEngagementButtonDiv); } const element = article.querySelector('div[data-testid="reply"]'); element.parentElement.parentElement.parentElement.appendChild(wrapper); } article.dataset.EBinjected = 'true'; } } })(); (function () { const callback = ms => ms.forEach(m => m.addedNodes.forEach(node => { const article = node.tagName == 'ARTICLE' && node || node.tagName == 'DIV' && (node.querySelector('article') || node.closest('article')); if (article && !article.dataset.EBinjected) EB.inject(article); })); const observer = new MutationObserver(callback) observer.observe(document.body, {childList: true, subtree: true}); })();