Alt Click To Download Image

Hold Alt key and click any image to download. Uses a robust method to bypass common download issues. Uses original filename and original download location.

// ==UserScript==
// @name         Alt Click To Download Image
// @namespace    http://tampermonkey.net/
// @version      2.1
// @description  Hold Alt key and click any image to download. Uses a robust method to bypass common download issues. Uses original filename and original download location.
// @author       BerkeA111
// @match        https://*/*
// @match        http://*/*
// @grant        GM_xmlhttpRequest
// @grant        GM_notification
// @connect      *
// @icon         data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAARNJREFUWEft1rFKA0EQxvFfEa4cFA9gL2An2OotYGFjL7GysxAsrLQTfIAgsVew8wewV7CwshCwsNAFiZcll2RyU5lF9sPDu++3/2RyMhLxPw48B16AngvwDgwCg/gC7IA+6BWE5wBwAaeYyX8h2IEVcF2g8ACwAitA83sBvgENwAuwC5w3C+Cn4Y+Ab+AV+AnAZAhPgXvgvbi+/YFPwDXgBziFw4BTOgRk8gQcA9q+vrzYUsVg6ekEuhG4rG8C3gK/EWhz8AIsK78DrwEPQN84nAXwA3wDPls/gJNxHPgGfAI2gfPANOAfMJI3gc/AEPAV2AZuAA/gI3AEvAY+Ad8BbwQ2s213wBfAG7DWBCLa/g/yB3f90lY2grRFAAAAAElFTkSuQmCC
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

    // --- CONFIGURATION ---
    const MODIFIER_KEY = 'altKey'; // Change to 'ctrlKey' or 'shiftKey' if you prefer.

    document.addEventListener('click', function(event) {

        // Check if the correct modifier key was held and if the clicked element is an image.
        if (event[MODIFIER_KEY] && event.target.tagName === 'IMG') {

            // Stop the browser's default action (e.g., navigating to the image).
            event.preventDefault();
            event.stopPropagation();

            const imageUrl = event.target.src;

            if (!imageUrl) {
                notify('Download Failed', 'Could not find the source URL for the clicked image.');
                return;
            }

            // This is a more powerful download method that helps bypass cross-origin security issues.
            // It fetches the image data first, then triggers a download from your browser's memory.
            GM_xmlhttpRequest({
                method: "GET",
                url: imageUrl,
                responseType: "blob", // We want the raw image data as a 'blob'.
                onload: function(response) {
                    // Get the final URL after any redirects.
                    const finalUrl = response.finalUrl || imageUrl;

                    // --- FILENAME LOGIC: Use the original name ---
                    // It will not be modified. We derive it from the last part of the URL path.
                    // This is the most reliable way to get a file's name without server headers.
                    let filename = finalUrl.substring(finalUrl.lastIndexOf('/') + 1).split('?')[0];
                    if (!filename) {
                        filename = "downloaded-image"; // Fallback name if URL ends in '/'
                    }

                    // Create a temporary link in memory to trigger the download.
                    const link = document.createElement('a');
                    link.href = URL.createObjectURL(response.response);
                    link.download = filename;

                    // Trigger the download and then clean up.
                    link.click();
                    URL.revokeObjectURL(link.href); // Free up memory.

                    notify('Download Started', `Downloading: ${filename}`);
                },
                onerror: function(error) {
                    console.error("Direct Downloader Error:", error);
                    notify('Download Failed', 'Could not fetch image. The server may be blocking it.');
                }
            });
        }
    }, true);

    // Helper function for showing notifications.
    function notify(title, text) {
        GM_notification({
            title: title,
            text: text,
            timeout: 4000
        });
    }
})();

QingJ © 2025

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