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

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

一、如何访问剪切板


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. Shader 001 - 函数造型能力

    0x00 从函数出发 Shader 中的很多效果都是由函数计算得出的,如何更好地理解二者的关系呢.不妨先看看函数是什么?函数的定义可以简单地描述为:给定一个集合 A,对于其中的元素施加法则 f,则可以 ...

  2. Linux实战(18):Centos强制踢掉某登录用户的方法

    [root@localhost ~]# pkill -kill -t pts/2

  3. PE安装window 10操作系统

    一.进入bios,通过u盘启动 1. 在bios中选择U盘启动 2. 选择第二选项,如果是老机器,就选择03或者04 二.进入PE操作系统后: 打开桌面上的Ghost手动工具,点击OK 依次点击loc ...

  4. yum管理——ningx部署私有repo源(4)

    一.前言: 为了加快安装效率,或者日后服务器处于内网环境,本次特写一片搭建的是一个属于个人私有repo源仓库,思路如下: 1.首先到mirrors.ustc.edu.cn下载用到的源的仓库 2.然后安 ...

  5. CTF-BugKu-WEB-35-41

    2020.09.19 go on,今天务必搞定web 经验教训 能运行php标签的扩展名有php4,phtml,phtm,phps,php5等,可以在php被过滤的时候尝试: html请求头中,对内容 ...

  6. RXJAVA之聚合操作

    concat 按顺序连接多个Observables.需要注意的是Observable.concat(a,b)等价于a.concatWith(b). startWith 在数据序列的开头增加一项数据.s ...

  7. FreeSWITCH 处理Refer盲转时,UUI传递不对(没有将SIP 消息头Refer-To中的User-to-User传递给B-Leg)

    运行环境:     CentOS 7.6     FreeSWICH 1.6.18   一.问题场景:     FreeSWITCH收到REFER命令后,重新发起的INVITE消息中的 "U ...

  8. idea开启Run DashBoard

    0-前言 IDEA中,run dashboard是一个直观.方便好用的面板,谁用谁知道: 但是它不是默认开启的,开启有两种方式: 方式一: 1.新项目中,有时会弹出面板让我们点击开启,点击一下就能开启 ...

  9. Java源码赏析(二)Java常见接口

    一.Comparable接口 package java.lang; import java.util.*; public interface Comparable<T> { /** * i ...

  10. 简单聊聊 Ironic

    上一篇文章里我简单介绍了一下「裸金属」的概念,提到了 OpenStack 中的核心项目 Ironic,今天简单来聊聊它. Ironic 项目的吉祥物 Bare Metal 所以用 Bear 来做吉祥物 ...