WebShell下拷贝粘贴支持
WebShell下拷贝粘贴的支持最近遇到了问题,这里总结下
浏览器剪贴板权限
当浏览器剪贴板权限关闭的情况下,在使用Clipboard API时会报错。但由于有些用户的浏览器有安全要求,因此剪贴板权限是不打开的,那么这时WebShell还可以正常支持复制粘贴吗。答案是可以的,因为浏览器也有拷贝和粘贴支持
浏览器的拷贝粘贴
以Windows为例,拷贝是⌃+c
,粘贴是⌃+v
以Mac为例,拷贝是⌘+c
,粘贴是⌘+v
以上热键是固定的,即当我们唤起该组合键即可执行对应行为
虽然是这样,但该事件是可以在页面逻辑里捕获并阻止以上的缺省行为的,因此也就可能会有问题,比如windows下的xterm.js
xterm.js下的ctrl+c,ctrl+v
由于xterm.js对于按键是有监听并处理的,因此会造成该热键不work。那么如何解决呢
attachCustomKeyEventHandler方法中针对热键进行处理,返回false即可保证缺省行为继续执行
1 | customKeyEventHandler – The custom KeyboardEvent handler to attach. This is a function that takes a KeyboardEvent, allowing consumers to stop propagation and/or prevent the default action. The function returns whether the event should be processed by xterm.js. |
浏览器热键支持拷贝粘贴并不能完美替代clipboard,那么clipboard不可用的情况下,还可以实现拷贝粘贴吗。
答案是一半一半
document.execCommand(‘copy’)
document对象的execCommand方法支持拷贝,所以测试下来发现,在没有clipboard支持的情况下,也可以动态拷贝指定文本到剪贴板。
但paste是不支持的,听说IE支持。当然还需注意,该API不提倡,属于老古董了。但作为兜底支持拷贝,个人觉得还不错。
写在最后
到此,拷贝粘贴使用也就这些了。
总结,除了我们使用clipboard支持之外,在没有权限的浏览器下,我们还是可以使用浏览器的默认热键实现最基本的文本选中,当然注意别阻止该行为就行了。
done.