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

当我们需要实现在富文本里进行粘贴操作的时候,如果我们复制的是图片,需要将图片上传服务器后,插入到文本内;看似合情合理的要求,却有很多坑。

一、如何访问剪切板


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。

 

点击领取全套C语言教程,更有免费开源项目和课程等你观看哦!

经验分享:计算机 web 浏览器——访问剪切板图片的更多相关文章

  1. chrome浏览器下JavaScript实现clipboard时无法访问剪切板解决方案

    在用JavaScript实现某个简单的复制到剪切板功能的时候,会考虑一下浏览器兼容性,主要是重点在IE和FireFox,把这个两个浏览器搞定后,基本上其他浏览器也不用太操心了,Chrome也一样,没出 ...

  2. JS访问剪切板中的图片

    google出来一个html2canvas,它利用canvas来渲染读取的DOM树,也就是说它只能截取document里的内容,如果要像qq截图那样,应该怎么做?用过百度的Ueditor编辑器的朋友都 ...

  3. web复制到剪切板js

    web复制到剪切板 clipboard.js 好使!开源项目,下载地址: https://github.com/zenorocha/clipboard.js 使用方法: 引入 clipboard.mi ...

  4. Python访问剪切板

    剪切板访问工具 ----pyperclip he purpose of Pyperclip is to provide a cross-platform Python module for copyi ...

  5. Android 高仿UC浏览器监控剪切板弹出悬浮窗功能

    UC浏览器应该是android手机里 最流行的浏览器之一了,他们有一个功能 相信大家都体验过,就是如果你复制了什么文字,(在其他app中 复制也有这个效果!,所以能猜到肯定是监控了剪切板),就会弹出一 ...

  6. java 访问剪切板(读取与设置)

    设置文本到剪切板 public void setIntoClipboard(String data) { Clipboard clipboard = Toolkit.getDefaultToolkit ...

  7. java web浏览器访问工程前面添加一级目录学习笔记

    有的时候因为nginx和f5策略问题需要在访问系统的时候前面添加一个前缀以区分不通地方需要用同一个工程的情况: 举个例子:当访问localhost:8080/webDemo/demo/shafei.j ...

  8. 计算机丨浏览器访问出现DNS_PROBE_POSSIBLE解决方法

    方法1.打开命令控制台输入: netsh winsock reset.提示重启,电脑重启后就ok了. 其他方法待续......

  9. 在多浏览器使用JS复制内容到剪切板,无需插件

    最近在学习DHTMLX,下载了一些JS源码,使用谷歌浏览器,在学习dhtmlxGrid部分进行复制表格内容时,发现,在线版的可以复制成功,而本地的不可以复制,报类似访问剪切板错误,经查找原因,原来是谷 ...

随机推荐

  1. IDEA里如何引入JQuery

    HTML页面的JavaScript里一般可以直接使用类似:<script src="js/jquery.js"></script>语句可以直接引入,但是会遇 ...

  2. python基础:面向对象

    一.定义 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类:一个种类,一个模型. 对象:指具体的东西,模型造出来的东西叫做对象. 实例:实例和对象是一样的. 实例化:实例化就 ...

  3. Oracle自动存储管理ASM

    参考资料: https://docs.oracle.com/cd/B19306_01/server.102/b14231/storeman.htm#ADMIN036 什么是ASM? ASM是Autom ...

  4. PHP木马免杀的一些总结

    前言 这篇文章写一些php木马免杀的一些技巧,希望对大家有点帮助.这里解释一下什么是php木马,这里大体分为三种: 能完成写入文件.列目录.查看文件.执行一些系统命令等少量功能的,这种的是" ...

  5. Combine 框架,从0到1 —— 4.在 Combine 中使用 KVO

      本文首发于 Ficow Shen's Blog,原文地址: Combine 框架,从0到1 -- 4.在 Combine 中使用 KVO.   内容概览 前言 用 KVO 监控改动 将 KVO 代 ...

  6. 硬核看房利器——Web 全景的实现

    作者:凹凸曼 - EC 疫情期间,打破社交距离限制的交互模式被推向前台,为不少行业的传统交易提供了想象的空间. 疫情时期,房地产租售业受到的冲击无疑是巨大的,由于人口流动的限制,需求量大幅减少,无法现 ...

  7. JVM垃圾收集机制

    JVM垃圾回收机制是java程序员必须要了解的知识,对于程序调优具有很大的帮助(同时也是大厂面试必问题). 要了解垃圾回收机制,主要从三个方面: (1)垃圾回收面向的对象是谁? (2)垃圾回收算法有哪 ...

  8. JAVA之代理1JDK

    代理主要有JDK的代理以及CGLIB的代理 代理方式 实现 优点 缺点 特点 JDK静态代理 代理类与委托类实现同一接口,并且在代理类中需要硬编码接口 实现简单,容易理解 代理类需要硬编码接口,在实际 ...

  9. thinkPHP5.1 MVC架构使用方法

    MVC架构 1.M层:model(模型),是增强版的数据库 M层是用来存放自动完成代码.修改器(数据修改).模型事件.验证器 2.V层:view 显示视图 V层用来存放HTML.css.JavaScr ...

  10. 9.Lock-锁