NiTwit

Show a button on the top to quickly toggle between Twitter and Nitter (or any other instance).

目前為 2023-07-26 提交的版本,檢視 最新版本

// ==UserScript==
// @name         NiTwit
// @namespace    http://tampermonkey.net/
// @version      0.1.3
// @description  Show a button on the top to quickly toggle between Twitter and Nitter (or any other instance).
// @author       Appel
// @match        *://*.twitter.com/*
// @grant        GM_getValue
// @grant        GM_setValue
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    let alternateDomain = GM_getValue('alternateDomain');

    // If no alternate domain has been set, prompt the user to input one, default is 'https://nitter.net'
    if (!alternateDomain) {
        alternateDomain = prompt('Please enter the full alternate domain (include https://) you want to switch to from https://twitter.com:', 'https://nitter.net');

        // If the user provides an alternate domain, save it
        if (alternateDomain) {
            GM_setValue('alternateDomain', alternateDomain);
        }
    }

    // Add the match rule for the alternate domain
    if (alternateDomain) {
        GM_info.scriptHandler.addMetaRule({name: '@match', value: `${alternateDomain}/*`});
    }

    // MutationObserver watches for changes in the document
    let observer = new MutationObserver(function() {
        if (document.querySelector('.nitter-switch')) {
            return;
        }
        
        const url = window.location.href;
        let newUrl = '';

        // Create button
        let btn = document.createElement('button');
        btn.classList.add('nitter-switch');
        btn.textContent = 'Switch';
        btn.style.position = 'fixed';
        btn.style.top = '0';
        btn.style.right = '0';
        btn.style.zIndex = '9999';

        // Add button to page
        document.body.appendChild(btn);

        btn.addEventListener('click', function(){
            if (url.includes('twitter.com')) {
                newUrl = url.replace('https://twitter.com', alternateDomain);
            } else if (url.includes(alternateDomain)) {
                newUrl = url.replace(alternateDomain, 'https://twitter.com');
            }

            window.location.href = newUrl;
        });
    });

    observer.observe(document, { childList: true, subtree: true });
})();