您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
Adds an Advanced Search button next to Twitter's search box. Makes it easier to access Twitter's powerful advanced search features.
// ==UserScript== // @name Twitter Search Advanced // @name:zh-CN Twitter高级搜索按钮 // @name:ja Twitter高度な検索ボタン // @name:fr Recherche Avancée Twitter // @name:ru Расширенный поиск Twitter // @name:es Búsqueda Avanzada de Twitter // @name:pt Pesquisa Avançada do Twitter // @namespace http://tampermonkey.net/ // @version 0.3 // @description Adds an Advanced Search button next to Twitter's search box. Makes it easier to access Twitter's powerful advanced search features. // @description:zh-CN 在Twitter搜索框旁边添加高级搜索按钮,方便快速访问Twitter强大的高级搜索功能。 // @description:ja Twitterの検索ボックスの横に高度な検索ボタンを追加し、Twitterの強力な検索機能に素早くアクセスできます。 // @description:fr Ajoute un bouton de recherche avancée à côté de la barre de recherche Twitter. Facilite l'accès aux puissantes fonctionnalités de recherche avancée de Twitter. // @description:ru Добавляет кнопку расширенного поиска рядом с полем поиска Twitter. Облегчает доступ к мощным функциям расширенного поиска Twitter. // @description:es Añade un botón de búsqueda avanzada junto al cuadro de búsqueda de Twitter. Facilita el acceso a las potentes funciones de búsqueda avanzada de Twitter. // @description:pt Adiciona um botão de pesquisa avançada ao lado da caixa de pesquisa do Twitter. Facilita o acesso aos poderosos recursos de pesquisa avançada do Twitter. // @author Your name // @match https://x.com/* // @match https://twitter.com/* // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; // Language settings const LANGUAGES = { 'zh-CN': '高级搜索', 'ja': '高度な検索', 'en': 'Search Advanced', 'fr': 'Recherche Avancée', 'ru': 'Расширенный поиск', 'es': 'Búsqueda Avanzada', 'pt': 'Pesquisa Avançada' }; // Get user's browser language function getUserLanguage() { const lang = navigator.language || navigator.userLanguage; const shortLang = lang.split('-')[0]; // Check for exact match first if (LANGUAGES[lang]) { return LANGUAGES[lang]; } // Then check for language without region if (LANGUAGES[shortLang]) { return LANGUAGES[shortLang]; } // Default to English return LANGUAGES['en']; } // Function to add the advanced search button function addAdvancedSearchButton() { // Find the search box container const searchBox = document.querySelector("#react-root > div > div > div.css-175oi2r.r-1f2l425.r-13qz1uu.r-417010.r-18u37iz > main > div > div > div > div > div > div.css-175oi2r.r-aqfbo4.r-gtdqiz.r-1gn8etr.r-1g40b8q > div.css-175oi2r.r-1e5uvyk.r-6026j > div.css-175oi2r.r-136ojw6 > div > div > div > div > div.css-175oi2r.r-1pz39u2.r-1777fci.r-15ysp7h.r-obd0qt.r-s8bhmr"); if (searchBox && !document.getElementById('advanced-search-btn')) { // Create the button const button = document.createElement('button'); button.id = 'advanced-search-btn'; button.textContent = getUserLanguage(); button.style.cssText = ` margin-left: 12px; padding: 0 16px; height: 32px; min-height: 32px; border-radius: 16px; background-color: rgb(15, 20, 25); color: rgb(255, 255, 255); border: 1px solid rgb(15, 20, 25); font-weight: 700; cursor: pointer; font-size: 14px; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; transition-property: background-color, box-shadow; transition-duration: 0.2s; line-height: 32px; display: inline-flex; align-items: center; justify-content: center; user-select: none; white-space: nowrap; `; // Add hover effect button.onmouseover = function() { this.style.backgroundColor = 'rgb(39, 44, 48)'; }; button.onmouseout = function() { this.style.backgroundColor = 'rgb(15, 20, 25)'; }; // Add click event button.addEventListener('click', function() { window.location.href = 'https://x.com/search-advanced'; }); // Insert the button after the search box searchBox.parentNode.insertBefore(button, searchBox.nextSibling); return true; } return false; } // Function to check if we should add the button function shouldAddButton() { const url = window.location.href; return url.includes('/explore') || url.includes('/search-advanced'); } // Function to continuously check for the search box function startChecking() { if (shouldAddButton()) { // Initial check if (!addAdvancedSearchButton()) { // If not found, set up periodic checking const checkInterval = setInterval(() => { if (addAdvancedSearchButton() || !shouldAddButton()) { clearInterval(checkInterval); } }, 1000); } } } // Start checking when script loads startChecking(); // Create a MutationObserver to watch for DOM changes const observer = new MutationObserver((mutations) => { if (shouldAddButton() && !document.getElementById('advanced-search-btn')) { startChecking(); } }); // Start observing the document with the configured parameters observer.observe(document.body, { childList: true, subtree: true, attributes: true, characterData: true }); // Also check when history events occur (back/forward navigation) window.addEventListener('popstate', function() { if (shouldAddButton()) { startChecking(); } }); // Check when the page visibility changes (tab switching) document.addEventListener('visibilitychange', function() { if (!document.hidden && shouldAddButton()) { startChecking(); } }); // Handle URL changes let lastUrl = location.href; new MutationObserver(() => { const url = location.href; if (url !== lastUrl) { lastUrl = url; if (shouldAddButton()) { startChecking(); } } }).observe(document, {subtree: true, childList: true}); })();