Threads.com 圖片/影片隱藏

隱藏 Threads.com 貼文圖片/影片

Tendrás que instalar una extensión para tu navegador como Tampermonkey, Greasemonkey o Violentmonkey si quieres utilizar este script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Userscripts para instalar este script.

Necesitará instalar una extensión como Tampermonkey para instalar este script.

Necesitarás instalar una extensión para administrar scripts de usuario si quieres instalar este script.

(Ya tengo un administrador de scripts de usuario, déjame instalarlo)

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

(Ya tengo un administrador de estilos de usuario, déjame instalarlo)

// ==UserScript==
// @name         Threads.com 圖片/影片隱藏
// @namespace    http://tampermonkey.net/
// @version      0.7.5
// @description  隱藏 Threads.com 貼文圖片/影片
// @match        https://www.threads.com/*
// @grant        none
// @run-at       document-idle
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

    const SMALL_SIZE = 200; // 小圖閾值

    // 🔑 檢查是否在單一媒體頁
    function inMediaPage() {
        return /\/post\/[^/]+\/media$/.test(location.pathname);
    }

    function handleButton(btn, mediaEl, label) {
        btn.addEventListener('click', (e) => {
            e.preventDefault();
            e.stopPropagation(); // 阻止外層 pressable
            console.log(`[Tampermonkey] 點擊 ${label}:`, mediaEl.src || mediaEl.currentSrc);
            mediaEl.style.display = '';
            if (mediaEl.tagName.toLowerCase() === 'video') {
                mediaEl.play().catch(()=>{});
            }
            btn.remove();
        }, { once: true });
    }

    function processImages() {
        if (inMediaPage()) {
            console.log('[Tampermonkey] 偵測到媒體頁,跳過遮掩處理');
            return;
        }

        const imgs = document.querySelectorAll('picture img, div img');
        imgs.forEach(img => {
            if (!img.dataset.hiddenByScript) {
                const w = img.width || img.naturalWidth || 0;
                const h = img.height || img.naturalHeight || 0;

                // 過濾小圖 (頭像/emoji)
                if (w < SMALL_SIZE && h < SMALL_SIZE) {
                    img.dataset.hiddenByScript = 'skip-small';
                    return;
                }

                img.dataset.hiddenByScript = 'true';
                img.style.display = 'none';

                const btn = document.createElement('button');
                btn.innerText = '顯示圖片';
                btn.style.display = 'block';
                btn.style.margin = '5px 0';
                btn.style.cursor = 'pointer';
                btn.style.padding = '4px 8px';
                btn.style.fontSize = '14px';

                handleButton(btn, img, '圖片');

                if (img.parentNode) {
                    img.parentNode.insertBefore(btn, img);
                }
            }
        });
    }

    function processVideos() {
        if (inMediaPage()) {
            console.log('[Tampermonkey] 偵測到媒體頁,跳過影片遮掩');
            return;
        }

        const vids = document.querySelectorAll('video');
        vids.forEach(video => {
            if (!video.dataset.hiddenByScript) {
                const w = video.videoWidth || video.clientWidth || 0;
                const h = video.videoHeight || video.clientHeight || 0;

                // 過濾小影片(通常是頭像動畫、背景特效)
                if (w < SMALL_SIZE && h < SMALL_SIZE) {
                    video.dataset.hiddenByScript = 'skip-small';
                    return;
                }

                video.dataset.hiddenByScript = 'true';

                try { video.pause(); } catch {}
                video.removeAttribute('autoplay');
                video.autoplay = false;
                video.style.display = 'none';

                const btn = document.createElement('button');
                btn.innerText = '顯示影片';
                btn.style.display = 'block';
                btn.style.margin = '5px 0';
                btn.style.cursor = 'pointer';
                btn.style.padding = '4px 8px';
                btn.style.fontSize = '14px';

                handleButton(btn, video, '影片');

                if (video.parentNode) {
                    video.parentNode.insertBefore(btn, video);
                }
            }
        });
    }

    console.log('[Tampermonkey] 腳本已啟動 (圖片/影片隱藏 + 小圖閾值200px + 媒體頁不遮掩)');
    processImages();
    processVideos();

    const observer = new MutationObserver(() => {
        processImages();
        processVideos();
    });
    observer.observe(document.body, { childList: true, subtree: true });
})();