前言

有时候,我们希望能访问用户的剪切板,来实现一些方便用户的功能;但是另一方面,剪切板里的数据对用户来说又是非常隐私的,所以浏览器在获取信息方面有安全限制,同时也提供访问接口。

前段时间由于业务功能,需要实现当用户在富文本里进行粘贴操作的时候,如果用户复制的是图片,需要将图片上传服务器后,插入到文本内;看似合情合理的要求,却有很多坑

一、什么时候能访问剪切板

1、在用户触发 onPaste 事件时(只能是用户进行事件触发),通过事件对象(event)获取。官方文档

let text = (event.clipboardData || window.clipboardData).getData('text');
复制代码

2、Chrome 新增异步剪贴板 API,可以跟用户申请访问权限,得到允许后则能访问。参考知乎的一篇文章

二、访问剪切板里的图片

先说结论

从文件系统复制图片 mac os能拿到最后一张;windows 拿不到数据
截图 mac 和 windows 能获取
在浏览器界面复制 mac 和 windows 能获取

windows 为什么一张都拿不到呢,用户在文件系统复制的文件,在剪切板里存的并不是图片(猜测存的是图片的标记),所以是拿不到。

代码如下

/**
*   触发 paste 事件,响应方法
*/
function paste(event) {// 拿到数据let items = (event.clipboardData || event.originalEvent.clipboardData).items;let imgList = []; // 获得图片数据,可以直接写入到 <img src=''> 的src内进行展示 let strList = [];for (let item of items) {// 如果拿到的数据是文件if (item.kind === 'file') {let blob = item.getAsFile();let reader = new FileReader();blobList.push(blob);reader.onload = ()=> {imgList.push(reader.result);}reader.readAsDataURL(blob);} else if(item.kind === 'string') {// 如果拿到的数据是字符串item.getAsString((s)=>{strList.push(s);});}}
}
复制代码

最后,想要完全实现用户 Contr+C、Contr+V 来发帖,目前还做不到。有一种替代方案,将图片拖动到富文本区域,这个操作也是很方便的,浏览器也都支持。

另外有一个公司的商业产品,他家开发的浏览器插件能支持在桌面复制图片后,粘贴到浏览器里。可惜目前只支持 windows 系统,mac os 还没有提供;

他们的方案我大致猜测是:安装浏览器插件并且允许运行后,当你在浏览器触发paste粘贴事件后,js调用插件方法,插件去访问系统里的文件(插件其实也是windows 的一个软件,所以能访问文件系统),然后返回给页面的 js。

浏览器 Web 访问剪切板图片相关推荐

  1. JavaFX 读取剪切板图片并保存图片到本地

    JavaFX 读取剪切板图片并保存图片到本地 使用 JavaFX Clipboard API Clipboard clipboard = Clipboard.getSystemClipboard(); ...

  2. ​Web前端剪切板文本分享到文件发送

    注意:本文Demo请点击文末"阅读原文"方便查看. 前言 现在前端富交互能力越来越强,也有很多产品基于前端技术进行离线应用开发或在线应用体验增强:这其中剪切板操作也是一个经常会亮相 ...

  3. 如何允许网页中的编辑器访问剪切板_Vditor下一代的 Markdown 编辑器,为未来而构建...

    ❝ Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得(富文本).即时渲染(类似 Typora)和分屏预览模式.它使用 TypeScript 实现,支持原生 JavaScript ...

  4. 951_WSL中emacs在org-mode中插入windows剪切板图片

    WSL中emacs在org-mode中插入windows中剪切板的图片 Grey WSL中emacs在org-mode中插入windows中剪切板的图片 功能诉求 我一直想打造一套可以一劳永逸的工具链 ...

  5. (PDF翻译助手)Python通过访问剪切板的方式使用谷歌翻译(pyperclip,requests)

    文章目录 背景 代码 10.12修改: 预览如下: 10.24修改: 执行 10.24修改2: 背景 博主在读研究生,需要看大量英文文献, 无奈英语太渣,硬着头皮看容易走神,使用翻译软件或者谷歌翻译还 ...

  6. js访问剪切板,先处理需要粘贴的文本后,再进行文本粘贴

    需求: 在一些查询input输入时,用户可能会从某个地方复制查询数据,然后粘贴到查询表单中,这时可能会造成复制的数据有空格,而恰巧你点表单又进行了位数设置,则复制出来的数据可能会因此少一位. 我的解决 ...

  7. html访问剪切板,如何根据指定的剪切板获取html?

    从指定的剪切板中获取html,这还是有一点小技巧的,下面带大家看一下代码/** * 从指定的剪切板中获取html * @param clipboard * @return * @throws Exce ...

  8. python获取剪切板图片_python 获取剪切板内容的两种方法

    第一种 # -*- coding: utf-8 -*- # @Time : 2020/3/16 21:26 # @File : get_text_from_cupboard_13.py # @Auth ...

  9. 关闭iOS上京东app不停询问“京东想从MF839粘贴”,您允许这样做吗? - 允许iphone应用访问剪切板

    效果图 解决办法 如下图: 打开设置 搜索"京东" 进入app设置页,找到"从其他App粘贴" 修改为"允许"

最新文章

  1. Windows 7 搭建 Mobile 6 真机调试开发环境
  2. jdbc连接mysql驱动方式_JDBC连接数据库系列教程 – JDBC注册驱动的常见方式
  3. 从PHP安全讲DedeCms的安全加固
  4. 长脖子鹿省选模拟赛 [LnOI2019SP]快速多项式变换(FPT)
  5. html非零正实数正则表达式,正数|非负数|正整数正小数和0 |金额正则表达式
  6. C语言指南-数组之谜
  7. 高并发中,那些不得不说的线程池与ThreadPoolExecutor类
  8. vivo S5官方广告正式揭晓:11月14日发布!
  9. 重定向linux编译,linux重定向 - 悟性的个人页面 - OSCHINA - 中文开源技术交流社区...
  10. 十九、FPGrowth算法介绍
  11. 华硕笔记本linux触摸板驱动,华硕触摸板驱动_华硕a豆笔记本触摸板驱动下载安装 v11.0.0.30 官方正式版-126g驱动网...
  12. 简单聊聊为什么说外包不好?
  13. 儿童摄影HTML实现
  14. Maxima函数的不完全列表
  15. matlab 绘图与动画制作
  16. 小白起步-大数据环境搭建-Java环境配置
  17. 青蛙的约会(poj 1061)exgcd基础题
  18. java取石子_HDU 1527 取石子游戏
  19. 网页背景动态线条 鼠标吸附动态线条效果的实现
  20. 联通下调国际漫游数据流量资费

热门文章

  1. win10环境下配置Gradle
  2. 输入框上的Magnifier
  3. 如何用Python Tkinter实现剪刀石头布小游戏?
  4. 机器学习——线性回归衍生(过拟合、正则化、岭回归和LASSO回归)
  5. mysql报错 Your password does not satisfy the current policy requirements
  6. 土木工程C语言题目,土木工程级C语言课程设计任务书.doc
  7. python3对拉勾数据进行可视化分析的方法详解
  8. MgH2-grap金属Ni-Mg/C镍对镁碳复合储氢材料hene|Mg/C复合储氢材料复合储氢材料
  9. python实现京东秒杀
  10. 为你揭秘,希格斯玻色子如何赋予粒子质量