Twitter mobile file browser unlocked

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

Du musst eine Erweiterung wie Tampermonkey, Greasemonkey oder Violentmonkey installieren, um dieses Skript zu installieren.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

Sie müssten eine Skript Manager Erweiterung installieren damit sie dieses Skript installieren können

(Ich habe schon ein Skript Manager, Lass mich es installieren!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==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);