iqdb Ctrl + V

在 iqdb 中使用 Ctrl + V 上传图片

  1. // ==UserScript==
  2. // @name iqdb Ctrl + V
  3. // @name:en iqdb Ctrl + V
  4. // @namespace http://tampermonkey.net/
  5. // @version 0.1.4
  6. // @description 在 iqdb 中使用 Ctrl + V 上传图片
  7. // @description:en Upload image to iqdb by Ctrl + V
  8. // @author apkipa
  9. // @match https://*.iqdb.org/*
  10. // @grant none
  11. // ==/UserScript==
  12.  
  13. (function() {
  14. 'use strict';
  15.  
  16. function extractImageFilesFromClipboard(event) {
  17. var clipboardData = event.clipboardData || window.clipboardData;
  18. var files = clipboardData.files;
  19. var a = new DataTransfer();
  20.  
  21. for (var i = 0; i < files.length; i++) {
  22. if (files[i].type.indexOf("image") !== -1) {
  23. a.items.add(files[i]);
  24. }
  25. }
  26.  
  27. if (a.files.length < 1) {
  28. return null;
  29. }
  30.  
  31. return a.files;
  32. }
  33.  
  34. function extractTextFromClipboard(event) {
  35. var clipboardData = event.clipboardData || window.clipboardData;
  36. return clipboardData.getData('Text');
  37. }
  38.  
  39. function createFilelistFromSingleFile(file) {
  40. var a = new DataTransfer();
  41. a.items.add(file);
  42. return a.files;
  43. }
  44.  
  45. function isHttpURL(text) {
  46. var url;
  47. try {
  48. url = new URL(text);
  49. } catch(_) {
  50. return false;
  51. }
  52. return url.protocol === "http:" || url.protocol === "https:";
  53. }
  54.  
  55. function handlePaste(e) {
  56. var files = extractImageFilesFromClipboard(e);
  57.  
  58. if (files !== null) {
  59. e.stopPropagation();
  60. e.preventDefault();
  61.  
  62. var fileInput = document.getElementById("file");
  63.  
  64. /* ? Not working here
  65. fileInput.addEventListener("change", () => {
  66. formUpload.form.submit();
  67. });
  68. */
  69.  
  70. fileInput.files = createFilelistFromSingleFile(files[0]);
  71. }
  72. else {
  73. console.log("Paste event does not contain images. Assuming text is pasted.");
  74. var text = extractTextFromClipboard(e);
  75. if (text == "") {
  76. console.log("No text in paste event, event is propagated.");
  77. return;
  78. }
  79.  
  80. if (!isHttpURL(text)) {
  81. console.log("Pasted text is not a URL, event is propagated.");
  82. return;
  83. }
  84.  
  85. var urlInput = document.getElementById("url");
  86.  
  87. e.stopPropagation();
  88. e.preventDefault();
  89.  
  90. urlInput.value = text;
  91. }
  92.  
  93. // Automatically submit the pasted data
  94. // (If this is not desired behavior, comment the line containing submit())
  95. var formUpload = document.querySelectorAll("input[type=submit]")[0];
  96. formUpload.form.submit();
  97. }
  98.  
  99. window.addEventListener('paste', handlePaste);
  100. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址