浏览器 Web 访问剪切板图片
前言
有时候,我们希望能访问用户的剪切板,来实现一些方便用户的功能;但是另一方面,剪切板里的数据对用户来说又是非常隐私的,所以浏览器在获取信息方面有安全限制,同时也提供访问接口。
前段时间由于业务功能,需要实现当用户在富文本里进行粘贴操作的时候,如果用户复制的是图片,需要将图片上传服务器后,插入到文本内;看似合情合理的要求,却有很多坑
一、什么时候能访问剪切板
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 访问剪切板图片相关推荐
- JavaFX 读取剪切板图片并保存图片到本地
JavaFX 读取剪切板图片并保存图片到本地 使用 JavaFX Clipboard API Clipboard clipboard = Clipboard.getSystemClipboard(); ...
- Web前端剪切板文本分享到文件发送
注意:本文Demo请点击文末"阅读原文"方便查看. 前言 现在前端富交互能力越来越强,也有很多产品基于前端技术进行离线应用开发或在线应用体验增强:这其中剪切板操作也是一个经常会亮相 ...
- 如何允许网页中的编辑器访问剪切板_Vditor下一代的 Markdown 编辑器,为未来而构建...
❝ Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得(富文本).即时渲染(类似 Typora)和分屏预览模式.它使用 TypeScript 实现,支持原生 JavaScript ...
- 951_WSL中emacs在org-mode中插入windows剪切板图片
WSL中emacs在org-mode中插入windows中剪切板的图片 Grey WSL中emacs在org-mode中插入windows中剪切板的图片 功能诉求 我一直想打造一套可以一劳永逸的工具链 ...
- (PDF翻译助手)Python通过访问剪切板的方式使用谷歌翻译(pyperclip,requests)
文章目录 背景 代码 10.12修改: 预览如下: 10.24修改: 执行 10.24修改2: 背景 博主在读研究生,需要看大量英文文献, 无奈英语太渣,硬着头皮看容易走神,使用翻译软件或者谷歌翻译还 ...
- js访问剪切板,先处理需要粘贴的文本后,再进行文本粘贴
需求: 在一些查询input输入时,用户可能会从某个地方复制查询数据,然后粘贴到查询表单中,这时可能会造成复制的数据有空格,而恰巧你点表单又进行了位数设置,则复制出来的数据可能会因此少一位. 我的解决 ...
- html访问剪切板,如何根据指定的剪切板获取html?
从指定的剪切板中获取html,这还是有一点小技巧的,下面带大家看一下代码/** * 从指定的剪切板中获取html * @param clipboard * @return * @throws Exce ...
- python获取剪切板图片_python 获取剪切板内容的两种方法
第一种 # -*- coding: utf-8 -*- # @Time : 2020/3/16 21:26 # @File : get_text_from_cupboard_13.py # @Auth ...
- 关闭iOS上京东app不停询问“京东想从MF839粘贴”,您允许这样做吗? - 允许iphone应用访问剪切板
效果图 解决办法 如下图: 打开设置 搜索"京东" 进入app设置页,找到"从其他App粘贴" 修改为"允许"
最新文章
- Windows 7 搭建 Mobile 6 真机调试开发环境
- jdbc连接mysql驱动方式_JDBC连接数据库系列教程 – JDBC注册驱动的常见方式
- 从PHP安全讲DedeCms的安全加固
- 长脖子鹿省选模拟赛 [LnOI2019SP]快速多项式变换(FPT)
- html非零正实数正则表达式,正数|非负数|正整数正小数和0 |金额正则表达式
- C语言指南-数组之谜
- 高并发中,那些不得不说的线程池与ThreadPoolExecutor类
- vivo S5官方广告正式揭晓:11月14日发布!
- 重定向linux编译,linux重定向 - 悟性的个人页面 - OSCHINA - 中文开源技术交流社区...
- 十九、FPGrowth算法介绍
- 华硕笔记本linux触摸板驱动,华硕触摸板驱动_华硕a豆笔记本触摸板驱动下载安装 v11.0.0.30 官方正式版-126g驱动网...
- 简单聊聊为什么说外包不好?
- 儿童摄影HTML实现
- Maxima函数的不完全列表
- matlab 绘图与动画制作
- 小白起步-大数据环境搭建-Java环境配置
- 青蛙的约会(poj 1061)exgcd基础题
- java取石子_HDU 1527 取石子游戏
- 网页背景动态线条 鼠标吸附动态线条效果的实现
- 联通下调国际漫游数据流量资费
热门文章
- win10环境下配置Gradle
- 输入框上的Magnifier
- 如何用Python Tkinter实现剪刀石头布小游戏?
- 机器学习——线性回归衍生(过拟合、正则化、岭回归和LASSO回归)
- mysql报错 Your password does not satisfy the current policy requirements
- 土木工程C语言题目,土木工程级C语言课程设计任务书.doc
- python3对拉勾数据进行可视化分析的方法详解
- MgH2-grap金属Ni-Mg/C镍对镁碳复合储氢材料hene|Mg/C复合储氢材料复合储氢材料
- python实现京东秒杀
- 为你揭秘,希格斯玻色子如何赋予粒子质量