JavaScript通过execCommand向剪贴板写入数据

本文介绍JavaScript使用document.execCommand等函数向系统剪贴板中写入数据的方法。

一、document.execCommand
document.execCommand(‘copy’)可以复制当前页面上选中的内容到剪贴板中
兼容性:
document.execCommand本身的兼容性非常好,主流的浏览器(包括IE6等低版本浏览器)都支持。
document.execCommand(‘copy’)并不是所有浏览器都支持,可以根据document.queryCommandSupported(‘copy’)来查询是否支持copy命令。
根据MDN官网上说明,copy命令的兼容性为:
Chrome:43
Firefox:41
IE:9
Opera:29
Safari:10

二、input的select方法
input的select方法可以选中input的全部内容
注意,input的type不能是hidden,并且input不能display:none或visibility:hidden,否则无法选中

三、示例代码
document.execCommand(‘copy’)会复制当前页面被选中的文本,如果想要将页面被选中的文本复制到剪贴板中,直接调用document.execCommand(‘copy’)即可
js:

const inputHidden = document.querySelector('#inputHidden');
inputHidden.value = '复制到剪贴板的内容';
inputHidden.select();
document.execCommand('copy');

html:

<input type="text" id="inputHidden" />

css:

#inputHidden{ left: -9999px; top: -9999px; position: fixed;}

四、在线Demo
https://demo.lyz810.com/clipBoard/

CSS.supports API介绍

CSS.supports API用于通过JavaScript检测当前浏览器是否支持某属性及某属性的值。

一、接口用法
1.supports(DOMString property, DOMString value), returns boolean
2.supports(DOMString conditionText), returns boolean

第一种方法接收2个参数,第一个参数是属性的名称(如display、width、margin等);第二个参数是属性的值(如inline-block、100px、-10px等)
第二种方法接收1个参数,为条件字符串,支持or和and运算符,如”(display:inline-block)”、”(width: 100px) or (margin: -10px)”
注意:必须使用括号将每个条件包裹起来,即使只有一个条件

二、规范说明
当supports()方法通过两个参数property和value调用时,如果property是客户端支持的CSS属性名字面量,并且value可以正确的解析为对应属性支持的值,必须返回true。字面量匹配意思是不会对CSS进行处理,前后的空格不会被去除,所以如果有前后空格会导致方法返回false(例如下面的调用会返回false,因为width前面多了一个空格:CSS.supports(‘ width’, ‘100px’))。

当通过单独的一个条件字符串参数进行调用,如果条件字符串能够解析计算为一个支持的属性和值,则返回true;否则返回false。

三、其他说明
1.属性值和属性名不区分大小写
2.如果属性名包含连字符“-”,直接写原始值即可,不需要转换为驼峰方式

四、示例

CSS.supports('width', '-10px');//false,width不能小于0
CSS.supports('height', '50');//false,height需要有单位
CSS.supports('position', 'sticky');//false,也可能为true,测试浏览器不支持sticky
CSS.supports('Z-INDEX', '50');//true,不区分大小写
CSS.supports(' z-index', '50');//false,属性名前面不应该有空格
CSS.supports('z-index', '  50  ');//true,属性值前后可以有空格
CSS.supports('display:none');//false,没有用括号,应为CSS.supports('(display:none)')
CSS.supports('(    display  :  none  )');//true,这种写法前后可以有空格
CSS.supports('(display:none) and (width:-10px)');//false,第二个条件不支持所以整体为false

五、兼容性
IE:不支持
Edge:支持
Firefox:23+
Chrome:28+
Safari:9+
Opera:15+
iOS Safari:9.2+
Android:4.4+