fastclick偶遇vue-clipboard2或clipboardJS ios无法复制
背景
在集团app内的移动端页面,使用vue-clipboard2发现ios端无法复制,改用clipboardJS也不能复制。
问题排查
安卓是可以的,但是ios怎么也复制不了。
经过长时间的问题排查以及资料查询,最终发现,是由于使用了fastclick
,而fastclick
构造了自定义事件提前触发。
ios无法触发复制,是因为系统剪贴板命令需要原生click触发。
解决问题
在使用fastclick
库的情况,需要给元素添加classname="needsclick"
,默认让这个元素走原生click。
原理如下,fastclick库源码:
后来仔细看了文档,已经明确的写明,自定义事件是无法访问系统粘贴板的。
A synthetic paste event must not give a script access to data on the real system clipboard. Synthetic cut and copy events must not modify data on the system clipboard. Synthetic paste events do not have any default action. Even if such an event is dispatched in an editable context, the implementation must not insert any data.
相关资料
fastclick.js 其它坑也需要注意。 iOS11.3 fastclick.js相关bug