找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
楼主: S8F8ry

[油猴脚本] 粘贴链接时去除内容中的空格

[复制链接]

45

主题

409

回帖

2548

积分

金牌会员

积分
2548
发表于 2025-5-2 23:38:36 | 显示全部楼层
本帖最后由 coult3 于 2025-5-2 23:42 编辑
gh0ul 发表于 2025-5-2 11:56
感谢,试用看看

又更新了一下,8楼的脚本有个小bug:假如当前输入框有一些文字,但是光标在这些文字的中间,这时粘贴,会发现插入的链接在文本末尾而不是光标之后,所以需要处理一下。

另外加入了一个新变量 textTest 对剪贴板原内容进行预处理,这样就可以更好地判断剪贴板中是不是链接或者特定协议了。
预处理也解决了协议名里有很长的空格 以及 : 和 / / 之间有空格的情况。😎
  1. (function () {
  2.   document.addEventListener('paste', evt => {
  3.     const clipboardData = evt.clipboardData;
  4.     if (clipboardData) {
  5.       const target = document.activeElement;
  6.       if (target && (target.tagName === 'INPUT' || target?.tagName === 'TEXTAREA')) {
  7.         let text = clipboardData.getData('text/plain');
  8.         // 先不管三七二十一,先把剪贴板中的文本去除空格,然后将其赋值给变量 textTest
  9.         let textTest = text.replace(/\s+/g, '');

  10.         // 然后检查 textTest 的前12个字符是否包含 :// 或者 textTest 整个文本是否以mailto:或magnet:或javascript: 开头,因为mailto/magnet/javascript 链接没有双斜杠。
  11.         // 如果 textTest 满足要求,则说明剪贴板中的文本是链接或者特定协议,然后就可以处理 【原剪贴板】中的文本。
  12.         // 这里的特定协议可以自定义
  13.         let Regex = /^(mailto|magnet|javascript):/;
  14.         if ( textTest.substring(0, 12).includes('://') || Regex.test(textTest) ) {
  15.           evt.preventDefault();
  16.           // 获取光标位置
  17.           const cursorPos = target.selectionStart;

  18.           // 获取光标前后的文本
  19.           const beforeText = target.value.substring(0, cursorPos);
  20.           const afterText = target.value.substring(cursorPos);

  21.           // 定义要插入的文本,把 【原剪贴板】中的文本 去掉空格
  22.           const insertText = text.replace(/\s+/g, '');

  23.           // 拼接成新的文本字符串
  24.           const newValue = beforeText + insertText + afterText;

  25.           // 更新输入框的值
  26.           target.value = newValue;

  27.           // 更新光标位置到插入文本的后面
  28.           const newCursorPos = cursorPos + insertText.length;
  29.           target.setSelectionRange(newCursorPos, newCursorPos);
  30.         }
  31.       }
  32.     }
  33.   }, true);
  34. })();
复制代码
参考:
javascript 插入文本到光标位置


https://developer.mozilla.org/en ... I/Reference/Schemes
https://developer.mozilla.org/zh-CN/docs/Web/URI
https://learn.microsoft.com/zh-c ... tform-apis/aa767739(v=vs.85)
https://learn.microsoft.com/zh-c ... sources/uri-schemes
https://learn.microsoft.com/en-u ... /launch-default-app



回复

使用道具 举报

29

主题

1661

回帖

8947

积分

论坛元老

积分
8947
发表于 2025-5-2 23:59:58 | 显示全部楼层
coult3 发表于 2025-5-2 23:38
又更新了一下,8楼的脚本有个小bug:假如当前输入框有一些文字,但是光标在这些文字的中间,这时粘贴,会 ...

好,谢谢
回复

使用道具 举报

45

主题

409

回帖

2548

积分

金牌会员

积分
2548
发表于 2025-5-3 12:18:20 | 显示全部楼层
S8F8ry 发表于 2025-5-2 22:22
😝 确实没有考虑到协议名里有空格的情况。

又更新了,在11楼,确实要考虑好几种情况,比如协议名里有空格,:之后有空格,//之间有空格。
这个确实苦恼了我好一阵儿,直到某天我突然灵光一闪,单次处理判断是否链接不好判断,那二次处理呢?!
不得不说预处理是一个妙招,先全部去掉空格,再判断是否链接或特定协议就好办多了
回复

使用道具 举报

1

主题

4

回帖

30

积分

新手上路

积分
30
发表于 2025-5-9 17:39:52 | 显示全部楼层
感谢分享,楼主是位好心人
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|百分浏览器论坛

GMT+8, 2025-6-8 04:06 , Processed in 0.017005 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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