全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 415|回复: 3

本论坛图片粘贴到编辑框插件,再也不用担心图片看不清了

[复制链接]
发表于 2024-1-4 16:47:14 | 显示全部楼层 |阅读模式
每次看到用户使用论坛的图片模糊不清就心痛,加上使用图床还是太麻烦,超级麻烦,那有什么方便的方式呢?
有,就如Github那样,用户截图或者复制图片后直接粘贴到文本框就行了,不需要额外的步骤

技术原理:用户主动粘贴图片到文本框时,文本框读取图片,然后自动上传到图床
支持工具:Chrome、Edge浏览器
实现效果:如图,另外代码中的图床可以换成任何支持接口的图床


【使用方式】
1、任意地方新建一个文件夹,在该文件夹下新建两个文件:manifest.json、hostloc.js,把对应的源码保存进去
2、进入浏览器的扩展管理,打开【开发人员模式】按钮,点击【加载解压缩的扩展】,选择刚刚新建的文件夹,选择该文件夹
Chrome打开扩展管理:chrome://extensions/
Edge打开扩展管理:edge://extensions/

manifest.json 源码文件内容如下:
  1. {
  2.   "name": "hostloc论坛图片粘贴插件",
  3.   "version": "1.0",
  4.   "content_scripts": [
  5.     {
  6.       "matches": [
  7.         "https://hostloc.com/*"
  8.       ],
  9.       "js": [
  10.         "hostloc.js"
  11.       ]
  12.     }
  13.   ],
  14.   "manifest_version": 3
  15. }
复制代码
发表于 2024-1-4 16:47:58 | 显示全部楼层
没有懒到这个程度,不需要
 楼主| 发表于 2024-1-4 16:48:17 | 显示全部楼层
hostloc.js 源码文件内容如下:
  1. const allTextarea = document.querySelectorAll('textarea');
  2. allTextarea.forEach((textarea) => {
  3.     textarea.addEventListener('paste', clipboardEvent);
  4. });
  5. function clipboardEvent(event) {
  6.     const clipboardItems = event.clipboardData.items;
  7.     for (const clipboardItem of clipboardItems) {
  8.         if (clipboardItem.type.indexOf('image') != -1) {
  9.             const parentDiv = this.parentElement;
  10.             if (parentDiv.querySelectorAll('hr').length == 0) parentDiv.appendChild(document.createElement('hr'));
  11.             const tips = document.createElement('div');
  12.             tips.innerText = '正在上传图片,请稍等... ...';
  13.             parentDiv.appendChild(tips);
  14.             const echoDiv = document.createElement('div');
  15.             parentDiv.appendChild(echoDiv);
  16.             const rows = this.getAttribute('rows');

  17.             const imageFile = clipboardItem.getAsFile();
  18.             const formData = new FormData();
  19.             formData.append('image', imageFile);
  20.             const xhr = new XMLHttpRequest();
  21.             xhr.open('POST', 'https://tucdn.wpon.cn/api/upload', true);
  22.             xhr.onreadystatechange = () => {
  23.                 if (xhr.readyState === 4 && xhr.status === 200) {
  24.                     const cursorPos = this.selectionStart;
  25.                     const textBefore = this.value.substring(0, cursorPos);
  26.                     const textAfter = this.value.substring(cursorPos);
  27.                     let insertText = '';
  28.                     const result = JSON.parse(xhr.responseText);
  29.                     if (result.code === 200) {
  30.                         insertText = `\n[img]${result.data.url}[/img]\n`;
  31.                         echoDiv.innerHTML = `<a class="xi2" target="_blank" href="${result.data.url}">${result.data.url} 查看</a>`;
  32.                     } else {
  33.                         insertText = `\n[img]${result.msg}[/img]\n`;
  34.                     }
  35.                     this.value = textBefore + insertText + textAfter;
  36.                     this.selectionStart = cursorPos + insertText.length;
  37.                     this.selectionEnd = cursorPos + insertText.length;
  38.                     if (rows) this.setAttribute('rows', parseInt(rows) + 2);
  39.                     tips.remove();
  40.                 }
  41.             };
  42.             xhr.send(formData);
  43.         }
  44.     }
  45. }
  46. const observer = new MutationObserver(function (mutationsList) {
  47.     for (const mutation of mutationsList) {
  48.         if (mutation.type === 'childList') {
  49.             const allTextarea = document.querySelectorAll('#append_parent textarea');
  50.             allTextarea.forEach((textarea) => {
  51.                 textarea.addEventListener('paste', clipboardEvent);
  52.             });
  53.         }
  54.     }
  55. });
  56. observer.observe(document.getElementById('append_parent'), {childList: true, subtree: true});
复制代码
发表于 2024-1-4 16:48:39 | 显示全部楼层
“就心痛”……楼主心怀mjj大军,楼主是好人
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2024-5-10 20:48 , Processed in 0.077366 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表