Twitter mobile file browser unlocked

Open the full file browser instead of just the recent media panel when attaching an image/video.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey, Greasemonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Userscripts.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een gebruikersscriptbeheerder nodig.

(Ik heb al een user script manager, laat me het downloaden!)

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

(Ik heb al een beheerder - laat me doorgaan met de installatie!)

// ==UserScript==
// @name         Twitter mobile file browser unlocked
// @namespace    http://tampermonkey.net/
// @version      2025-04-29
// @author       mesmere
// @description  Open the full file browser instead of just the recent media panel when attaching an image/video.
// @match        https://twitter.com/*
// @match        https://x.com/*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        window.onurlchange
// @run-at       document-idle
// @license      MIT
// ==/UserScript==

function attempt(remainingElems = 2) {
    if (window.location.href.match(/^https:\/\/(twitter|x)\.com\/compose\/post$/) === null) {
        return;
    }
    const fileInputElems = document.querySelectorAll("input[type=file]");

    for (const fileInputElem of fileInputElems) {
        // Mobile browser file-picker behavior is determined by the HTMLInputElement.accept property.
        fileInputElem.accept = "";
    }

    // There are two separate file inputs on the page and one can load a long time before the other.
    if (fileInputElems.length < remainingElems) {
        window.setTimeout(attempt, 200, remainingElems - fileInputElems.length);
    }
}
attempt();
window.addEventListener("urlchange", attempt);