当前位置: 首页 > article >正文

JS Clipboard API

1.作用

  1. 在web应用程序中,当用户授予了相应的权限,Clipboard API 就能实现系统剪切板的复制、粘贴和剪切功能。
  2. 系统剪切板暴露在Navigator.clipboard 中。

2.例子

window.onload = () => {
  // 监听用户的复制事件
  document.addEventListener('copy', (e) => {
    // 阻止浏览器的默认复制行为 
    e.preventDefault()
    // 把复制的内容放到系统的剪切板中  
    // navigator.clipboard.writeText 的返回值是一个Promise
    navigator.clipboard.writeText(e.target.innerText).then(() => {
      console.log('复制成功!');
    }).catch(() => {
      console.log('复制失败!');
    })
  })

  // 监听用户的粘贴
  document.addEventListener('paste', (e) => {
    // 验证输入
    const clipboardData = e.clipboardData;
    if (!clipboardData) {
      console.error('无效的输入。');
      return;
    }
    // 判断粘贴的是图片还是文本
    const files = clipboardData.files;
    if (files.length > 0) { // 图片
      e.preventDefault();
      const file = files[0];
      // 读取文件数据 转为base64字符串
      const reader = new FileReader();
      reader.onload = (event) => {
        // base64字符串 
        const data = event.target.result;
        let image = document.createElement('img')
        image.src = data
        document.querySelector('.editor').appendChild(image)
      };
      reader.onerror = (event) => {
        console.error('读取文件时出错。');
      };
      reader.readAsDataURL(file);
    } else { // 文本
      navigator.clipboard.readText().then((text) => {
        let divDom = document.createElement('div')
        divDom.innerHTML = text;
        document.querySelector('.editor').appendChild(divDom)
        console.log('粘贴成功!');
      }).catch((error) => {
        console.error('粘贴失败:', error);
      });
    }
  });
}

http://www.kler.cn/a/507044.html

相关文章:

  • Yolov8 目标检测剪枝学习记录
  • 人工智能之深度学习-[1]-了解深度学习
  • 【混合开发】CefSharp+Vue 解决Cookie问题
  • My ICLR Learning-Feedback
  • 升级 SpringBoot3 全项目讲解 — 为什么 SpringBoot3 应该抛弃 Maven,搭配 Gradle 来使用?
  • C#读取本地网络配置信息全攻略
  • 本地部署Web-Check网站检测与分析利器并实现远程访问实时监测
  • python爬虫笔记
  • 当PHP遇上区块链:一场奇妙的技术之旅
  • 【Python】使用python 对excel文件进行加密
  • 基于SpringCloud的广告系统设计与实现(一)
  • vscode 切换文件时,修改内容时很卡,怎么解决?
  • No.33 笔记 | Docker入门:基础概念与实用指南
  • wordpress的火车头商品发布接口
  • iOS面试模版
  • 赤店商城系统点餐小程序多门店分销APP共享股东h5源码saas账号独立版全插件全开源
  • 学习threejs,使用OrbitControls相机控制器
  • STM32的集成开发环境STM32CubeIDE安装
  • spark,读取和写入同一张表问题
  • 掌握 TypeScript 的 `Omit` 工具类型:灵活操作对象属性的艺术
  • [Qt]常用控件介绍-布局管理器-QVBoxLayout、QHBoxLayout、QGridLayout、QFormLayout、QSpace控件
  • AI实验室copilot自动化科研,AMD联手约翰霍普金斯大学:成本节约84%!
  • 【JVM-6】JVM 监控工具 jstat 的使用和具体应用案例
  • 【区间DP】【hard】力扣730. 统计不同回文子序列
  • css3网格布局
  • JavaEE:多线程初阶