吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 544|回复: 9
收起左侧

[已解决] JS如何获取剪贴板内容

[复制链接]
xzf 发表于 2025-3-7 15:46
本帖最后由 xzf 于 2025-3-17 08:39 编辑

下面这个是我从网上找的HTML5 从剪贴板中获取,但没有写出要这么获取。知道的望老师们指点写下,

<textarea id="textArea" rows="4" cols="50"></textarea>
<button>粘贴</button>

<script>
function pasteText() {
    var textArea = document.getElementById('textArea');
    var textToPaste = "这是剪贴板中的文本内容"; // 你要获取的文本
    textArea.focus(); // 确保文本区域获得焦点
    if (document.queryCommandSupported('insertText')) {
        document.execCommand('insertText', false, textToPaste);
    } else {
        textArea.value += textToPaste; // 对于不支持insertText的浏览器,直接追加文本
    }
}
</script>

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
wang917 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

冥界3大法王 发表于 2025-3-7 16:03
lchgucg 发表于 2025-3-7 16:04
<textarea id="textArea" rows="4" cols="50"></textarea>
<button onclick="pasteText()">粘贴</button> <!-- 添加点击事件 -->

<script>
async function pasteText() {
    const textArea = document.getElementById('textArea');
   
    try {
        // 读取剪贴板文本内容
        const clipboardText = await navigator.clipboard.readText();
        
        // 插入文本到文本框
        textArea.focus();
        if (document.queryCommandSupported('insertText')) {
            document.execCommand('insertText', false, clipboardText);
        } else {
            textArea.value += clipboardText;
        }
    } catch (err) {
        console.error('无法读取剪贴板内容:', err);
        // 处理错误(如权限被拒绝)
        alert('请允许剪贴板访问权限');
    }
}
</script>

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
xzf + 1 + 1 热心回复!

查看全部评分

Pwaerm 发表于 2025-3-7 16:09
zch11230 发表于 2025-3-7 16:52
以前写的
[JavaScript] 纯文本查看 复制代码
1
2
3
4
5
6
var textarea = document.createElement('textarea');
textarea.value = 'test value';
document.body.appendChild(textarea);
textarea.select();
document.execCommand('copy');
document.body.removeChild(textarea);
黄色土豆 发表于 2025-3-7 17:14
[JavaScript] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
<textarea id="textArea" rows="4" cols="50"></textarea>
<button id="pasteBtn">粘贴</button>
 
<script>
document.getElementById('pasteBtn').addEventListener('click', async function() {
    try {
        const text = await navigator.clipboard.readText(); // 从剪贴板读取文本
        document.getElementById('textArea').value += text; // 插入到文本区域
    } catch (err) {
        console.error('无法读取剪贴板内容:', err);
        alert('读取剪贴板失败,请确保浏览器支持且已授权!');
    }
});
</script>

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
xzf + 1 + 1 热心回复!

查看全部评分

 楼主| xzf 发表于 2025-3-7 19:05
黄色土豆 发表于 2025-3-7 17:14
[mw_shl_code=javascript,true]
粘贴

我试了,点击粘贴后没有效果,不知道是我浏览器问题,还是其它,我浏览器是搜狗。
lforl 发表于 2025-3-8 09:41
旧版 IE 浏览器(如 IE6、IE7)确实允许通过 window.clipboardData 直接访问剪贴板,旧版 IE 的 window.clipboardData 出于安全考虑,已不再适用。

在Chrome浏览器中,JavaScript确实也可以获取剪贴板内容,但需要满足一些条件:
出于安全考虑,只能在用户交互(如点击按钮)后通过异步API获取
网站必须运行在安全上下文(HTTPS或localhost)用户必须明确授予权限。

代码示例,直接随便问一个AI。
黄色土豆 发表于 2025-3-10 09:13
xzf 发表于 2025-3-7 19:05
我试了,点击粘贴后没有效果,不知道是我浏览器问题,还是其它,我浏览器是搜狗。

试试谷歌啊。谷歌是开发者必用浏览器
街望 发表于 2025-3-11 05:41
JavaScript 获取剪贴板内容主要有两种主流方案,需根据浏览器兼容性和安全策略选择实现方式:
一、现代方案:Clipboard API(推荐)核心方法:&#8203;
javascriptnavigator.clipboard.readText()  .then(text => console.log(text))  .catch(err => console.error("无法读取剪贴板:", err));特点与限制:&#8203;
  • &#8203;异步操作:返回 Promise 对象,不阻塞主线程
    2
    3
  • &#8203;安全要求
    • 需在 HTTPS 或 localhost 环境下使用
      7
      10
    • 必须通过用户主动交互(如点击事件)触发
      6
      7

  • &#8203;权限控制:首次调用时会弹出用户授权提示
    2
    7
  • &#8203;扩展功能:可通过 read() 方法获取非文本内容(如图片)
    7
    10

完整示例:&#8203;
javascriptdocument.getElementById('pasteBtn').addEventListener('click', async () => {  try {    const text = await navigator.clipboard.readText();    document.getElementById('output').innerText = text;  } catch (err) {    console.error('失败原因:', err.name); // 常见错误:NotAllowedError(未授权)  }});
二、传统方案:execCommand(已弃用,兼容旧浏览器)实现原理:&#8203;
javascriptdocument.execCommand('paste');实现步骤:&#8203;
  • 创建隐藏输入框并聚焦
  • 执行粘贴命令获取内容
  • 清理临时元素
示例代码:&#8203;
javascriptfunction getClipboardLegacy() {  const tempInput = document.createElement('input');  tempInput.style.position = 'fixed';  tempInput.style.opacity = 0;  document.body.appendChild(tempInput);  tempInput.focus();    if (document.execCommand('paste')) {    const content = tempInput.value;    tempInput.remove();    return content;  }  return null;}局限性:&#8203;
  • 仅支持文本内容
    1
    3
  • 要求页面处于可编辑状态
    5
    9
  • 已被 Chrome 88+ 等现代浏览器弃用
    7
    10


三、特殊场景处理1. 监听粘贴事件通过 paste 事件捕获用户粘贴行为,可获取更丰富的内容类型:
javascriptwindow.addEventListener('paste', async (e) => {  // 获取文本  const text = e.clipboardData.getData('text/plain');    // 获取HTML  const html = e.clipboardData.getData('text/html');  // 处理文件/图片  if (e.clipboardData.files.length > 0) {    const file = e.clipboardData.files[0];    const reader = new FileReader();    reader.onload = () => console.log(reader.result);    reader.readAsDataURL(file);  }});2. 读取图片内容
javascriptconst clipboardItems = await navigator.clipboard.read();for (const item of clipboardItems) {  if (item.types.includes('image/png')) {    const blob = await item.getType('image/png');    const img = document.createElement('img');    img.src = URL.createObjectURL(blob);    document.body.appendChild(img);  }}
四、安全与兼容性建议
  • &#8203;权限处理:通过 navigator.permissions.query({ name: 'clipboard-read' }) 检查权限状态
    7
  • &#8203;降级策略

javascriptif (navigator.clipboard) {  // 使用现代API} else {  // 使用execCommand或提示浏览器不支持}
  • &#8203;错误处理:捕获 NotAllowedError(用户拒绝授权)和 TypeError(非安全环境)
    7
    10


最佳实践总结
方案
适用场景
优点
缺点

Clipboard API
现代浏览器、需要丰富数据类型
异步安全、功能强大
需要HTTPS、用户授权

execCommand
兼容旧系统
无需额外授权
已弃用、功能有限

paste事件监听
实时捕获用户粘贴动作
支持文件/图片
需用户主动粘贴操作
建议优先使用 Clipboard API,并在旧版浏览器中通过特性检测提供备用方案
3
7
10
。涉及敏感操作时,务必明确告知用户剪贴板访问意图。

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
xzf + 1 + 1 谢谢@Thanks!

查看全部评分

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-5-20 03:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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