首页 > 其他分享 >JS 读写剪贴板

JS 读写剪贴板

时间:2024-08-21 22:15:15浏览次数:6  
标签:API 剪贴板 const text 读写 JS clipboard document

document.execCommand API

  1. 复制操作

    复制时,先选中文本,然后调用document.execCommand('copy'):

    const inputElement = document.querySelector("#input");
    inputElement.select();
    document.execCommand("copy");
    

    注意:复制操作最好由用户触发,如果脚本自主执行,可能某些浏览器会报错

  2. 剪贴操作:

    同复制操作

    const inputElement = document.querySelector("#input");
    inputElement.select();
    document.execCommand("cut");
    
  3. 粘贴操作
    粘贴时,调用document.execCommand('paste'),会将剪贴板里面的内容输出到当前聚焦元素中

    const pasteText = document.querySelector("#output");
    pasteText.focus();
    document.execCommand("paste");
    

缺点

  1. 只能将选中的内容复制到剪贴板,无法写入任意内容
  2. 同步操作遇到大量数据,容易卡顿,有些浏览器还会跳出提示框,要求用户许可,
    在用户选择前页面会失去响应

Clipboard API

  1. 申请权限

    浏览器规定,只有 HTTPS 协议的页面和开发环境(localhost)才能使用 clipboard API。
    其次,在调用时需要明确获得用户许可,权限使用 Permission API 获取:

    const queryOpts = {
      // 'clipboard-read' 为读取剪贴板权限, 'clipboard-write' 为写权限
      name: "clipboard-read",
      // 控制调用 clipboard API 时是否需要用户触发,默认值因浏览器而异,不要省略该参数
      allowWithoutGesture: false,
    };
    const permissionStatus = await navigator.permissions.query(queryOps);
    // permissionStatus 可能返回这三个值:
    // 1. 'granted': 表示用户允许
    // 2. 'denied': 表示用户拒绝
    // 3. 'prompt': 表示用户未明确允许,与拒绝相同
    
  2. 从剪贴板读取数据

    // 读取文本
    const text = await navigator.clipboard.readText();
    // 读取任意数据
    const clipboardItems = await navigator.clipboard.read();
    clipboardItems.forEach(clipboardItem => {
      // 通过 mime type 获取 Blob 对象
      const blob = await clipboardItem.getType('text/plain');
    })
    
  3. 将数据写入剪贴板

    // 写纯文本数据
    await navigator.clipboard.writeText("text");
    // 同时写入多个数据
    const canvas = document.getElementById("canvas");
    const blob = await canvas.toBlob();
    const text = new Blob(["text"], { type: "text/plain" });
    const item = new ClipboardItem({
      [blob.type]: blob,
      [text.type]: text,
    });
    await navigator.clipboard.write([item]);
    

注意

  1. 只有 HTTPS 协议的页面和开发环境可以使用
  2. 需要 permission API 获得用户许可
  3. 页面窗口失去焦点时调用 clipboard API 会报错

标签:API,剪贴板,const,text,读写,JS,clipboard,document
From: https://www.cnblogs.com/vgerbot/p/18372688

相关文章

  • js面试题 图片懒加载!
    一、原理只加载可视区域内的图片,而那些还未滑动到可视区域的图片先不加载,直到用户滚动到这些资源即将可见的时候才进行加载。若一个页面有大量的图片资源,网页首次打开时,若同时加载完这些资源,需要消耗大量的时间,利用图片懒加载,先加载部分图片,既不会影响用户体验,又能大幅提升首......
  • js 手写图片懒加载插件
    一、目标模仿vue-lazyload插件只需将img标签的src属性名替换为自定义属性v-lazy,即可实现图片懒加载功能例如:二、实现不清楚图片懒加载原理的参考我的上一篇博客1.封装自定义插件:暴露一个对象,包含一个install方法先介绍一下自定义插件使用方法和通用写法://main.jsimp......
  • 跨域、JSONP、CORS、Spring、Spring Security解决方案
    概述JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象。跨域是浏览器(如Chrome浏览器基于JSV8引擎,可以简单理解为JS解释器)的一种同源安全策略,是浏览器单方面限制脚本的跨域访问。因此,仅有客户端运行在浏览器时才存在跨域问题,才需要考虑如何解决这个问题。浏览器控制台......
  • 【Three.JS零基础入门教程】第七篇:材质详解
      前期回顾:【Three.JS零基础入门教程】第一篇:搭建开发环境【Three.JS零基础入门教程】第二篇:起步案例【Three.JS零基础入门教程】第三篇:开发辅助【Three.JS零基础入门教程】第四篇:基础变换【Three.JS零基础入门教程】第五篇:项目规划【Three.JS零基础入门教程】第六篇:物......
  • 基于NPOI封装支持多级表头灵活读写的《Soul.XLS》库
    一、先上效果图二、上代码dotnetaddpackageSoul.XLS--version1.1.0//构造一个多级表头varcolumns=newExcelColumnCollection("学生信息"){newExcelColumn("学生信息"){Items=new[]{newExcelColumn("个人信息")......
  • 网络增加安全策略,兼容模式下打不开网页的问题,用到了js中的获取时间
    1、遇到了403的问题,查到原因是因为要url转义,可是转义后,发现极速模式可以用,兼容模式依然是403的问题。所以认为兼容模式与极速模式的解析url中存在很大差异,通过比较兼容模式与极速模式的url,发现兼容模式有中文字符,极速模式下是转义的,所以将中文字符换成英文,发现可以打开链接了。......
  • 基于nodejs+vue协同过滤算法的音乐推荐系统 [程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,数字音乐已成为人们日常生活中不可或缺的一部分。面对海量的音乐资源,用户往往难以快速找到符合个人喜好的音乐作品。传统的音乐搜......
  • 基于nodejs+vue农村医保信息系统[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着我国农村经济的快速发展和人民生活水平的提高,农村医疗保障体系的建设日益受到重视。然而,传统的农村医保管理方式存在信息孤岛、流程繁琐、效率低下等问......
  • 基于nodejs+vue农村商业银行贷款交易处理系统[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着农村经济的蓬勃发展,农村商业银行在支持农业、农村和农民发展方面扮演着至关重要的角色。然而,传统的贷款交易处理流程往往存在效率低下、信息不对称、风......
  • 基于nodejs+vue面向爱宠人群的宠物资讯系统[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着社会经济的快速发展与居民生活水平的提升,宠物已成为越来越多家庭的重要成员,爱宠人群规模日益庞大。这一群体对于宠物养护、健康管理、行为训练及生活娱......