您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Upload pasted images to image hosting service and insert as markdown, CloudFlare-ImgBed : https://github.com/MarSeventh/CloudFlare-ImgBed
当前为
// ==UserScript== // @name Image Uploader to Markdown to CloudFlare-ImgBed // @namespace http://tampermonkey.net/ // @version 0.1 // @description Upload pasted images to image hosting service and insert as markdown, CloudFlare-ImgBed : https://github.com/MarSeventh/CloudFlare-ImgBed // @author calg // @match *://*/* // @grant GM_xmlhttpRequest // @grant GM_addStyle // @license MIT // ==/UserScript== (function() { 'use strict'; // 配置信息 const CONFIG = { AUTH_CODE: 'AUTH_CODE', // 替换为你的认证码 SERVER_URL: 'SERVER_URL', // 替换为实际的服务器地址 UPLOAD_PARAMS: { serverCompress: true, uploadChannel: 'telegram', // 可选 telegram 和 cfr2 autoRetry: true, uploadNameType: 'index', // 可选值为[default, index, origin, short],分别代表默认前缀_原名命名、仅前缀命名、仅原名命名和短链接命名法,默认为default returnFormat: 'full', uploadFolder: 'apiupload' // 指定上传目录,用相对路径表示,例如上传到img/test目录需填img/test } }; // 添加通知样式 GM_addStyle(` .img-upload-notification { position: fixed; top: 20px; right: 20px; padding: 15px 20px; border-radius: 5px; z-index: 9999; max-width: 300px; font-size: 14px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); transition: opacity 0.3s ease; } .img-upload-success { background-color: #4caf50; color: white; } .img-upload-error { background-color: #f44336; color: white; } .img-upload-info { background-color: #2196F3; color: white; } `); // 显示通知的函数 function showNotification(message, type = 'info') { const notification = document.createElement('div'); notification.className = `img-upload-notification img-upload-${type}`; notification.textContent = message; document.body.appendChild(notification); // 3秒后自动消失 setTimeout(() => { notification.style.opacity = '0'; setTimeout(() => { document.body.removeChild(notification); }, 300); }, 3000); } // 监听所有文本输入区域的粘贴事件 function addPasteListener() { document.addEventListener('paste', async function(event) { // 检查当前焦点是否在文本输入区域 const activeElement = document.activeElement; if (!activeElement || !['INPUT', 'TEXTAREA'].includes(activeElement.tagName)) { return; } // 获取剪贴板中的图片 const items = event.clipboardData.items; let hasImage = false; for (let item of items) { if (item.type.startsWith('image/')) { hasImage = true; event.preventDefault(); const blob = item.getAsFile(); showNotification('正在上传图片,请稍候...', 'info'); await uploadImage(blob, activeElement); break; } } if (!hasImage) { // 如果粘贴的内容不包含图片,不做任何处理 return; } }); } // 上传图片 async function uploadImage(blob, targetElement) { const formData = new FormData(); formData.append('file', blob, 'pasted-image.png'); // 构建查询参数 const queryParams = new URLSearchParams({ authCode: CONFIG.AUTH_CODE, ...CONFIG.UPLOAD_PARAMS }).toString(); try { GM_xmlhttpRequest({ method: 'POST', url: `${CONFIG.SERVER_URL}/upload?${queryParams}`, data: formData, onload: function(response) { if (response.status === 200) { try { const result = JSON.parse(response.responseText); if (result && result.length > 0) { const imageUrl = result[0].src; insertMarkdownImage(imageUrl, targetElement); showNotification('图片上传成功!', 'success'); } else { showNotification('上传成功但未获取到图片链接,请检查服务器响应', 'error'); } } catch (e) { showNotification('解析服务器响应失败:' + e.message, 'error'); } } else { let errorMsg = '上传失败'; try { const errorResponse = JSON.parse(response.responseText); errorMsg += ':' + (errorResponse.message || response.statusText); } catch (e) { errorMsg += `(状态码:${response.status})`; } showNotification(errorMsg, 'error'); } }, onerror: function(error) { showNotification('网络错误:无法连接到图床服务器', 'error'); } }); } catch (error) { showNotification('上传过程发生错误:' + error.message, 'error'); } } // 在输入框中插入 Markdown 格式的图片链接 function insertMarkdownImage(imageUrl, element) { const markdownImage = ``; const start = element.selectionStart; const end = element.selectionEnd; const text = element.value; element.value = text.substring(0, start) + markdownImage + text.substring(end); element.selectionStart = element.selectionEnd = start + markdownImage.length; element.focus(); } // 初始化 addPasteListener(); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址