Maakt het mogelijk om afbeeldingen direct in bestandsuploadvelden op websites te plakken.
// ==UserScript==
// @name Universal Image Paste Support
// @name:ar دعم لصق الصور العالمي
// @name:be Універсальная падтрымка ўстаўкі выяў
// @name:bg Универсална поддръжка за поставяне на изображения
// @name:ckb پشتگیری گشتی بۆ لکاندنی وێنە
// @name:cs Univerzální podpora vkládání obrázků
// @name:da Universel understøttelse af billedindsætning
// @name:de Universelle Unterstützung zum Einfügen von Bildern
// @name:el Καθολική υποστήριξη επικόλλησης εικόνων
// @name:en Universal Image Paste Support
// @name:eo Universala subteno por alglui bildojn
// @name:es Soporte universal para pegar imágenes
// @name:es-419 Soporte universal para pegar imágenes
// @name:fi Yleinen kuvien liittämistuki
// @name:fr Prise en charge universelle du collage d’images
// @name:fr-CA Prise en charge universelle du collage d’images
// @name:he תמיכה אוניברסלית בהדבקת תמונות
// @name:hr Univerzalna podrška za lijepljenje slika
// @name:hu Univerzális képbemásztási támogatás
// @name:id Dukungan Tempel Gambar Universal
// @name:it Supporto universale per incollare immagini
// @name:ja 画像貼り付けユニバーサル対応
// @name:ka სურათის ჩასმის უნივერსალური მხარდაჭერა
// @name:ko 범용 이미지 붙여넣기 지원
// @name:mr सार्वत्रिक प्रतिमा पेस्ट समर्थन
// @name:nb Universell støtte for innliming av bilder
// @name:nl Universele ondersteuning voor afbeeldingen plakken
// @name:pl Uniwersalna obsługa wklejania obrazów
// @name:pt-BR Suporte universal para colar imagens
// @name:ro Suport universal pentru lipirea imaginilor
// @name:ru Универсальная поддержка вставки изображений
// @name:sk Univerzálna podpora vkladania obrázkov
// @name:sr Универзална подршка за налепљивање слика
// @name:sv Universellt stöd för att klistra in bilder
// @name:th รองรับการวางรูปภาพแบบสากล
// @name:tr Evrensel Görsel Yapıştırma Desteği
// @name:ug رەسىم چاپلاشنى ھەممىباب قوللاش
// @name:uk Універсальна підтримка вставлення зображень
// @name:vi Hỗ trợ dán hình ảnh phổ quát
// @name:zh-CN 通用图片粘贴支持
// @name:zh-TW 通用圖片貼上支援
// @description Enable pasting images directly into file upload inputs across websites.
// @description:ar يتيح لصق الصور مباشرة في حقول رفع الملفات على مختلف المواقع.
// @description:be Дазваляе ўстаўляць выявы непасрэдна ў палі загрузкі файлаў на розных сайтах.
// @description:bg Позволява директно поставяне на изображения в полета за качване на файлове в различни сайтове.
// @description:ckb ڕێگە دەدات وێنەکان ڕاستەوخۆ لە خانەکانی بارکردنی پەڕگە لە ماڵپەڕەکاندا بلکێنرێن.
// @description:cs Umožňuje vkládat obrázky přímo do polí pro nahrávání souborů na různých webech.
// @description:da Gør det muligt at indsætte billeder direkte i filuploadfelter på tværs af websites.
// @description:de Ermöglicht das direkte Einfügen von Bildern in Datei-Upload-Felder auf Websites.
// @description:el Επιτρέπει την απευθείας επικόλληση εικόνων σε πεδία μεταφόρτωσης αρχείων σε ιστότοπους.
// @description:en Enable pasting images directly into file upload inputs across websites.
// @description:eo Ebligas alglui bildojn rekte en dosieralŝutajn kampojn tra retejoj.
// @description:es Permite pegar imágenes directamente en campos de carga de archivos en distintos sitios web.
// @description:es-419 Permite pegar imágenes directamente en campos de carga de archivos en distintos sitios web.
// @description:fi Mahdollistaa kuvien liittämisen suoraan tiedostonlatauskenttiin eri sivustoilla.
// @description:fr Permet de coller des images directement dans les champs d’envoi de fichiers sur les sites web.
// @description:fr-CA Permet de coller des images directement dans les champs d’envoi de fichiers sur les sites web.
// @description:he מאפשר להדביק תמונות ישירות לשדות העלאת קבצים באתרים שונים.
// @description:hr Omogućuje izravno lijepljenje slika u polja za prijenos datoteka na web-stranicama.
// @description:hu Lehetővé teszi képek közvetlen beillesztését fájlfeltöltő mezőkbe webhelyeken.
// @description:id Memungkinkan gambar ditempel langsung ke kolom unggah file di berbagai situs web.
// @description:it Consente di incollare immagini direttamente nei campi di caricamento file sui siti web.
// @description:ja さまざまなサイトで、画像をファイルアップロード欄に直接貼り付けられるようにします。
// @description:ka საშუალებას გაძლევთ სურათები პირდაპირ ჩასვათ ფაილის ატვირთვის ველებში სხვადასხვა საიტზე.
// @description:ko 여러 웹사이트에서 이미지를 파일 업로드 입력란에 직접 붙여넣을 수 있게 합니다.
// @description:mr विविध वेबसाइटवर प्रतिमा थेट फाइल अपलोड इनपुटमध्ये पेस्ट करण्याची सुविधा देते.
// @description:nb Gjør det mulig å lime inn bilder direkte i filopplastingsfelt på nettsteder.
// @description:nl Maakt het mogelijk om afbeeldingen direct in bestandsuploadvelden op websites te plakken.
// @description:pl Umożliwia bezpośrednie wklejanie obrazów do pól przesyłania plików na stronach.
// @description:pt-BR Permite colar imagens diretamente em campos de upload de arquivos em sites.
// @description:ro Permite lipirea imaginilor direct în câmpurile de încărcare a fișierelor pe site-uri.
// @description:ru Позволяет вставлять изображения напрямую в поля загрузки файлов на разных сайтах.
// @description:sk Umožňuje vkladať obrázky priamo do polí na nahrávanie súborov na rôznych weboch.
// @description:sr Омогућава директно налепљивање слика у поља за отпремање датотека на веб-сајтовима.
// @description:sv Gör det möjligt att klistra in bilder direkt i filuppladdningsfält på webbplatser.
// @description:th ช่วยให้วางรูปภาพลงในช่องอัปโหลดไฟล์บนเว็บไซต์ต่าง ๆ ได้โดยตรง
// @description:tr Görselleri web sitelerindeki dosya yükleme alanlarına doğrudan yapıştırmayı sağlar.
// @description:ug تور بېكەتلەردە رەسىملەرنى ھۆججەت يۈكلەش رامكىسىغا بىۋاسىتە چاپلاشقا يول قويىدۇ.
// @description:uk Дозволяє вставляти зображення безпосередньо в поля завантаження файлів на сайтах.
// @description:vi Cho phép dán hình ảnh trực tiếp vào ô tải tệp trên các trang web.
// @description:zh-CN 支持在各类网站中将剪贴板图片直接粘贴到文件上传控件。
// @description:zh-TW 支援在各類網站中將剪貼簿圖片直接貼到檔案上傳欄位。
// @version 1.0.0
// @author Murasame
// @namespace https://www.murasame.site
// @license MIT
// @match *://*/*
// @grant none
// ==/UserScript==
(function () {
'use strict';
const VERBOSE_LOGGING = false;
const LOG_PREFIX = '[Universal Image Paste]';
function logVerbose(...messages) {
if (VERBOSE_LOGGING) {
console.log(LOG_PREFIX, ...messages);
}
}
function getClipboardImageFile(clipboardData) {
if (!clipboardData || !clipboardData.items) {
logVerbose('Clipboard data object not found.');
return null;
}
for (const item of clipboardData.items) {
if (item.type.includes('image')) {
return item.getAsFile();
}
}
logVerbose('No image found in the current clipboard data.');
return null;
}
function isFileInput(element) {
return element instanceof HTMLInputElement && element.type === 'file';
}
function isVisible(element) {
const rect = element.getBoundingClientRect();
return element.offsetParent !== null || (rect.width > 0 && rect.height > 0);
}
function findTargetFileInput() {
if (isFileInput(document.activeElement)) {
logVerbose('Target found via active element.');
return document.activeElement;
}
const fileInputs = Array.from(document.querySelectorAll('input[type="file"]'));
const visibleInput = fileInputs.find(isVisible);
if (visibleInput) {
logVerbose('Target found via DOM query (first visible input).');
return visibleInput;
}
if (fileInputs.length > 0) {
logVerbose('Target found via DOM query (hidden input fallback).');
return fileInputs[0];
}
logVerbose('No suitable <input type="file"> found on the page to receive the image.');
return null;
}
function attachFileToInput(file, input) {
const dataTransfer = new DataTransfer();
dataTransfer.items.add(file);
input.files = dataTransfer.files;
input.dispatchEvent(new Event('change', { bubbles: true }));
logVerbose('Successfully attached image to input and dispatched change event.', input);
}
document.addEventListener('paste', function (event) {
const imageFile = getClipboardImageFile(event.clipboardData || window.clipboardData);
if (!imageFile) {
return;
}
logVerbose(
'Image extracted from clipboard:',
imageFile.name,
'Type:',
imageFile.type,
'Size:',
imageFile.size,
'bytes'
);
const targetFileInput = findTargetFileInput();
if (!targetFileInput) {
return;
}
try {
attachFileToInput(imageFile, targetFileInput);
} catch (error) {
logVerbose('Error attaching file to input:', error);
}
});
})();