您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
在 V2EX 的每个帖子标题旁添加一个“忽略”按钮,单击即可忽略该主题。
当前为
// ==UserScript== // @name V2EX Ignore // @license GNU GPLv3 // @namespace https://www.example.com/ // @version 1.9 // @description Adds an "Ignore" button next to each post's title on V2EX that allows you to ignore the topic with a single click. // @description:zh-CN 在 V2EX 的每个帖子标题旁添加一个“忽略”按钮,单击即可忽略该主题。 // @description:zh-TW 在 V2EX 的每個帖子標題旁添加一個“忽略”按鈕,單擊即可忽略該主題。 // @description:ja 在 V2EX の各投稿タイトルの横に、「無視する」ボタンを追加し、クリックするだけでそのトピックを無視できます。 // @author Arryboom // @match https://*.v2ex.com/* // @match https://v2ex.com/* // @grant GM_xmlhttpRequest // @run-at document-end // ==/UserScript== (function() { 'use strict'; const debug = true; const debugLog = debug ? console.log.bind(console) : function() {}; debugLog("Ignore plugin running"); // Function to ignore a topic function ignoreTopic(event) { event.preventDefault(); const topicLink = event.target.parentNode.querySelector('.item_title a'); if (topicLink) { const topicUrl = topicLink.href; const topicId = getTopicIdFromUrl(topicUrl); if (topicId) { getOnceValue().then(onceValue => { const ignoreUrl = `https://${window.location.hostname}/ignore/topic/${topicId}?once=${onceValue}`; GM_xmlhttpRequest({ method: 'GET', url: ignoreUrl, onload: function(response) { debugLog(`Topic ${topicId} ignored.`); const post = event.target.closest('.cell.item'); if (post) { post.remove(); debugLog(`Post ${topicId} removed.`); showToast(`Topic ${topicId} ignored.`, function() { window.location.reload(); }); } }, onerror: function(error) { debugLog(`Error ignoring topic ${topicId}: ${error}`); } }); }).catch(error => { debugLog(`Error fetching once value: ${error}`); }); } } } // Function to extract the topic ID from a topic URL function getTopicIdFromUrl(topicUrl) { const match = topicUrl.match(/\/t\/(\d+)/); if (match) { return match[1]; } return null; } // Function to fetch the current once value from the V2EX server function getOnceValue() { return new Promise((resolve, reject) => { const tops = document.querySelectorAll('a.top'); const top = Array.from(tops).find(a => a.getAttribute('onclick')?.includes('once=')); if (top) { const onclick = top.getAttribute('onclick'); const match = onclick.match(/\?once=(\d+)/); if (match) { const onceValue = match[1].replace(/\D/g, ''); debugLog(`Current once value is ${onceValue}`); resolve(onceValue); return; } } const error = new Error('Not logged in.'); error.isAuthenticationError = true; reject(error); }); } // Function to display a toast message function showToast(message, callback) { const toast = document.createElement('div'); toast.textContent = message; toast.style.position = 'fixed'; toast.style.bottom = '20px'; toast.style.right = '20px'; toast.style.padding = '10px'; toast.style.backgroundColor = '#333'; toast.style.color = '#fff'; toast.style.borderRadius = '5px'; document.body.appendChild(toast); setTimeout(() => { toast.remove(); if (callback) { callback(); } }, 300); } // Find all post titles on the page and add an "Ignore" button next to each one const postTitles = document.querySelectorAll('.cell.item .item_title'); postTitles.forEach(postTitle => { const ignoreButton = document.createElement('a'); ignoreButton.textContent = 'Ignore'; ignoreButton.href = '#'; ignoreButton.classList.add('tag'); ignoreButton.addEventListener('click', ignoreTopic); postTitle.parentNode.insertBefore(ignoreButton, postTitle.nextSibling); }); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址