您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
ctrl-v to paste clipboard file into file form field
当前为
// ==UserScript== // @name paste to form file field // @namespace http://gholk.github.io/ // @description ctrl-v to paste clipboard file into file form field // @match https://www.google.com/imghp // @version 4 // @grant GM.xmlHttpRequest // ==/UserScript== document.body.addEventListener('paste', (paste) => { if (paste.clipboardData.files.length == 0) return putFileIntoForm(paste.clipboardData.files) }) document.body.addEventListener('dragover', (over) => over.preventDefault()) document.body.addEventListener('drop', async (drop) => { drop.preventDefault() const data = drop.dataTransfer console.debug('type', ...data.types) let fileList if (typeof GM != 'undefined' && data.files.length == 0 && ~data.types.indexOf('text/plain')) { const urlList = data.getData('text/plain') .split('\n').filter(u => u.charAt(0) != '#') console.debug(urlList) try { fileList = await Promise.all(urlList.map(fetchFile)) console.debug(fileList) fileList = createFileList(...fileList) } catch (e) { console.error(e) return } } else fileList = drop.dataTransfer.files putFileIntoForm(fileList) }) function createFileList(...fileList) { // attribute to https://stackoverflow.com/a/56447852/8362703 const data = new DataTransfer() for (const file of fileList) data.items.add(file) return data.files } async function fetchFile(url) { function xhrToFileType(xhr) { for (const row of xhr.responseHeaders.split(/\n/)) { // line-end with \r\n const scan = row.match(/^content-type: (.*)\/(.*)/i) if (scan) return scan[2] } } return await new Promise((resolve, reject) => { GM.xmlHttpRequest({ method: 'GET', url, responseType: 'blob', onload(xhr) { const blob = xhr.response const type = xhrToFileType(xhr) let file if (type) { file = new File( [blob], `drop-image.${type}`, {type: `image/${type}`} ) } else file = new File([blob], `drop-image`) resolve(file) }, onerror(xhr) { reject(xhr.statusText) } }) }) } function putFileIntoForm(fileList) { const input = document.querySelector('input[type = "file"]') if (!input) return console.debug('fileList:', ...fileList) // attribute to https://stackoverflow.com/a/50427897/8362703 input.files = fileList const change = new Event('change', {bubbles: true, cancelable: false}) input.dispatchEvent(change) }
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址