Twitter X Title

Change Twitter X Title

目前为 2023-08-22 提交的版本。查看 最新版本

// ==UserScript==
// @name        Twitter X Title
// @namespace   TwitterX
// @match       https://twitter.com/*
// @grant       none
// @version     0.1.3
// @author      CY Fung
// @description Change Twitter X Title
// @run-at      document-start
// @license     MIT
// ==/UserScript==


(function () {
  'use strict';

  function customTitle(p) {
    let q = p.replace(/[\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000]/g, ' ');
    if (p.trim() === 'X') q = p.replace('X', 'Twitter');
    else if (p.endsWith(' / X')) {
      q = p.substring(0, p.length - ' / X'.length) + ' / Twitter';
      for(const xc of ['X 上的 ', ' on X: ']){
        
        const idx = p.indexOf(xc);
        if(idx>=0){
          const tc = xc.replace('X', 'Twitter');
          q = p.substring(0, idx) + tc + p.substring(idx + xc.length);
        }
      }
    }
    return q;
  }

  const map = new Map();

  function fixTitle() {

    let p = document.title;
    if (!p) return;

    let q = map.get(p)
    if (q) {
      if (p !== q) {
        document.title = q;
      }
      return;
    }

    q = customTitle(p);

    if (map.size > 96) map.clear();
    map.set(p, q)

    if (p !== q) {
      map.set(q, q)
      document.title = q;
    }

  }


  function handleTitleChange(mutationsList) {
    console.log(document.title)

    let b = false;
    for (const mutation of mutationsList) {
      if (mutation.type === 'childList') {
        // Title has changed, do something here
        b = true;
        break;
      }
    }

    if (b) {
      // console.log('Title changed:', document.title);
      fixTitle();
    }
  }

  let observer = null;

  function doActionFn() {

    // Check if the title element has appeared
    const titleElement = document.querySelector('title');
    if (titleElement) {
      // Title element found, stop observing
      if (observer) observer.disconnect();

      // Now, create a new observer to monitor the title changes
      const titleObserver = new MutationObserver(handleTitleChange);

      // Configure the observer to monitor the title text changes
      const config = { childList: true, subtree: true };

      // Start observing the title element
      titleObserver.observe(titleElement, config);

      // Log the initial title
      // console.log('Initial Title:', titleElement.textContent);
      fixTitle()
    }

  }

  // Function to handle the title changes
  function mutCallback(mutationsList, observer) {
    let doAction = false;
    for (const mutation of mutationsList) {
      if (mutation.type === 'childList') {
        doAction = true;
        break;
      }
    }
    if (doAction) doActionFn();
  }

  if (document.querySelector('title')) {

    doActionFn();

  } else {


    // Create a new MutationObserver to monitor the document for the title element
    observer = new MutationObserver(mutCallback);

    // Configure the observer to monitor childList changes (new elements)
    const config = { childList: true, subtree: true };

    // Start observing the document
    observer.observe(document, config);

  }

})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址