您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Replace the page title with the user profile name and auto alt text on Pinterest (removes emojis from name) - Optimized for performance
当前为
// ==UserScript== // @name Pinterest - Enhanced Page Title with Username and Alt Text // @version 2.7 // @description Replace the page title with the user profile name and auto alt text on Pinterest (removes emojis from name) - Optimized for performance // @author wolffgang // @match *://*.pinterest.com/* // @grant none // @namespace // ==/UserScript== (function() { 'use strict'; let observer = null; // Declare observer outside the function let titleReplaced = false; function replaceTitle() { if (titleReplaced) return; // Prevent further executions let usernameElement = null; let profileNameElement = null; let username = null; let fullName = null; let autoAltText = null; let pinId = null; // Extract pinId from URL const url = window.location.href; const pinIdMatch = url.match(/pin\/(\d+)/); if (pinIdMatch && pinIdMatch[1]) { pinId = pinIdMatch[1]; } // Extract data from __PWS_INITIAL_PROPS__ script tag const scriptTag = document.getElementById('__PWS_INITIAL_PROPS__'); if (scriptTag) { try { const jsonData = JSON.parse(scriptTag.textContent); console.log('JSON Data:', jsonData); // Log the entire JSON data for inspection fullName = jsonData?.initialReduxState?.user?.currentUser?.full_name; username = jsonData?.initialReduxState?.user?.currentUser?.username; // Extract auto_alt_text from the JSON data if (pinId) { autoAltText = jsonData?.initialReduxState?.pins?.[pinId]?.auto_alt_text; } console.log('Extracted autoAltText:', autoAltText); // Log the extracted autoAltText } catch (error) { console.error('Error parsing JSON:', error); } } // Check if it's a pin page if (window.location.href.match(/pin\/\d+/)) { profileNameElement = document.querySelector('div[data-test-id="creator-profile-name"] div.X8m.zDA.IZT.tBJ.dyH.iFc.j1A.swG'); usernameElement = document.querySelector('a[data-test-id="creator-profile-link"]'); } // Check if it's a profile page else if (window.location.href.match(/\/[a-zA-Z0-9]+\/$/)) { profileNameElement = document.querySelector('div[data-test-id="profile-name"] div.zI7.iyn.Hsu[style*="display: inline"]'); const urlParts = window.location.pathname.split('/'); username = urlParts[1]; } let title = ''; if (fullName && username) { title = `${fullName} (${username})`; } else if (profileNameElement && usernameElement) { const displayedUsername = profileNameElement.innerText; const linkUsername = usernameElement.getAttribute('href').replace(/\//g, ''); title = `${displayedUsername} (${linkUsername})`; } else if (profileNameElement && username) { const displayedUsername = profileNameElement.innerText; title = `${displayedUsername} (${username})`; } if (autoAltText) { title += ` - ${autoAltText}`; } document.title = title; // Post-processing: Remove emojis from document.title document.title = document.title.replace(/[\u2000-\u3300]|\uD83C[\uD000-\uDFFF]|\uD83D[\uD000-\uDFFF]|\uD83E[\uD000-\uDFFF]/g, ''); titleReplaced = true; // Set flag to prevent further executions if (observer) { observer.disconnect(); // Disconnect observer console.log('MutationObserver disconnected.'); } } // Debounce function function debounce(func, delay) { let timeout; return function() { const context = this; const args = arguments; clearTimeout(timeout); timeout = setTimeout(() => func.apply(context, args), delay); }; } const debouncedReplaceTitle = debounce(replaceTitle, 250); // Debounce by 250ms // Observe changes in the DOM to handle dynamic content loading observer = new MutationObserver(debouncedReplaceTitle); observer.observe(document.body, { childList: true, subtree: true, attributes: true, // Observe attribute changes characterData: true // Observe text content changes }); // Initial call to handle cases where the elements are already loaded debouncedReplaceTitle(); // Reduced aggressive retries const interval = setInterval(() => { if (titleReplaced) { clearInterval(interval); return; } debouncedReplaceTitle(); }, 2000); // Retry every 2 seconds // Stop the interval after a certain amount of time setTimeout(() => { clearInterval(interval); if (!titleReplaced && observer) { observer.disconnect(); console.log('MutationObserver disconnected due to timeout.'); } }, 5000); // Retry for 5 seconds })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址