// ==UserScript== // @name X_Twitter_Pinned_List_Open // @name:ja X(Twitter)で固定されたリストを開く // @namespace https://greasyfork.org/users/1324207 // @match https://x.com/* // @version 2.3 // @run-at document-start // @author Lark8037 // @description Open a pinned list when you visit X(Twitter). // @description:ja X(Twitter)を訪れた時に固定されたリストを開きます。 // @license MIT // @icon https://abs.twimg.com/favicons/twitter.3.ico // @downloadURL none // ==/UserScript== (() => { const isSelected = el => el?.getAttribute("aria-selected") === "true"; let observer; const startObserver = () => { if (!location.pathname.startsWith("/home")) return; if (observer) observer.disconnect(); observer = new MutationObserver((_, ob) => { const tabs = document.querySelectorAll('[role="tab"]'); if (tabs.length < 3) return; if (!isSelected(tabs[0]) && !isSelected(tabs[1])) return; if (isSelected(tabs[2])) { ob.disconnect(); return; } tabs[2].click(); ob.disconnect(); }); observer.observe(document.documentElement, { childList: true, subtree: true }); }; startObserver(); const hook = fn => function () { const r = fn.apply(this, arguments); queueMicrotask(startObserver); return r; }; history.pushState = hook(history.pushState); history.replaceState = hook(history.replaceState); window.addEventListener("popstate", startObserver); })();