EasyScreenOCR Add Clipboard Upload Feature

Allow direct image upload from the clipboard.

Você precisará instalar uma extensão como Tampermonkey, Greasemonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Userscripts para instalar este script.

Você precisará instalar uma extensão como o Tampermonkey para instalar este script.

Você precisará instalar um gerenciador de scripts de usuário para instalar este script.

(Eu já tenho um gerenciador de scripts de usuário, me deixe instalá-lo!)

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

(Eu já possuo um gerenciador de estilos de usuário, me deixar fazer a instalação!)

// ==UserScript==
// @name               EasyScreenOCR Add Clipboard Upload Feature
// @name:zh-tw         EasyScreenOCR 增加從剪貼簿上傳的功能
// @version            1.2
// @description        Allow direct image upload from the clipboard.
// @description:zh-tw  允許從剪貼簿直接上傳圖片
// @match              https://online.easyscreenocr.com/*
// @grant              none
// @author             ani20168
// @icon               https://online.easyscreenocr.com/favicon.ico
// @namespace          https://greasyfork.org/users/1044014
// ==/UserScript==

(function() {
    'use strict';

    // Define the new dropzone element
    var dropzone = document.querySelector('.el-upload');

    dropzone.addEventListener('paste', function(event) {
        // Get the clipboard data as an image file
        var items = (event.clipboardData || event.originalEvent.clipboardData).items;
        for (var i = 0; i < items.length; i++) {
            if (items[i].type.indexOf("image") !== -1) {
                var blob = items[i].getAsFile();

                // Create a new file object from the clipboard image data
                var file = new File([blob], "pasted-image.png", {type: "image/png"});

                // "el-upload__input" seems to be the actual file input, so we will use it to trigger the upload
                var fileInput = dropzone.querySelector('.el-upload__input');
                if (fileInput) {
                    fileInput.files = new FileListItems([file]);

                    // Manually dispatch a change event
                    var changeEvent = new Event('change', { 'bubbles': true });
                    fileInput.dispatchEvent(changeEvent);
                }
            }
        }
    });

    // This is a helper function to allow us to assign to the files property of an input
    function FileListItems(files) {
        var b = new ClipboardEvent("").clipboardData || new DataTransfer(); // ClipboardEvent's clipboardData or fallback
        for (var i = 0, len = files.length; i<len; i++) b.items.add(files[i]);
        return b.files;
    }

})();