美文网首页
Clipboard.js : 移动端复制到粘贴板兼容问题

Clipboard.js : 移动端复制到粘贴板兼容问题

作者: 那一处风景ljz | 来源:发表于2018-04-27 15:48 被阅读4595次

最近在项目中遇到这样一个需求:
点击按钮,将指定的URL/字符串 复制到剪贴板,然后用户可以粘贴到其他地方。

方案一:zeroClipboard.js

github地址https://github.com/zeroclipboard/zeroclipboard
复制原理:zeroClipboard利用透明的 flash 覆盖在复制按钮上,点击 flash,将复制内容传入到 flash 中,再通过 flash 把传入的内容写到剪贴板上
首先想到这个插件的原因是,之前在PC端的项目中使用过,兼容性很好,驾轻就熟,所以,先用它做了个demo
HTML

<input type="text" name="" id="iUrl" value="https://github.com/zeroclipboard/zeroclipboard">
<button id="copyUrlBtn">复制链接</button>

JAVASCRIPT

(function(){
        var btn = document.getElementById('copyUrlBtn'),
        text = document.getElementById('iUrl'),
        zc = new ZeroClipboard(btn);
    zc.on('beforecopy', function(e){
        zc.setText(text.value);
    });
    btn.onclick = function(){
        alert('已复制');
    }
})();

使用zeroClipboard.js需要注意以下两点:

1# ZeroClipboard.swf 和 ZeroClipboard.min.js 需在同一目录结构下, ZeroClipboard.swf无需调用,只需在页面中引用ZeroClipboard.min.js 即可;
2# 测试复制功能需在服务器环境,可以是简单的本地服务器,如:http://localhost:8000/xx

测试结果:

在PC端浏览器上测试,功能正常;但是在ios上,无论是QQ浏览器,还是Safari浏览器都无法实现复制功能。

可能由于Flash技术正被各大浏览器厂商冷落,所以,截止到目前ZeroClipboard.js最新版,也无法实现在移动端浏览器进行文本复制。

方案二:Clipboard.js

** 官网地址**:https://clipboardjs.com/

兼容的版本

虽然要求Safari版本在10以上,但是作者做了很好的优雅降级:

The good news is that clipboard.js gracefully degrades if you need to support older browsers. All you have to do is show a tooltip saying Copied! when success event is called and Press Ctrl+C to copy when error event is called because the text is already selected.

也就是说,Safari版本是10以上的,可以直接成功复制;如果是版本小于10,可以通过如下代码提示用户手动复制:

clipboard.on('error', function(e) {
    alert('请选择“拷贝”进行复制!')
});

Safari版本在10以下的效果:

在 alert('请选择“拷贝”进行复制!') 之后,待复制的文字会自动选中,然后弹出系统本身的tooltip

效果如下:

点击第二次复制按钮才出现上方工具栏

demo:

//ClipboardJS.isSupported()  //--------这句为:是否兼容
var clipboard = new Clipboard('.btn');
//优雅降级:safari 版本号>=10,提示复制成功;否则提示需在文字选中后,手动选择“拷贝”进行复制
clipboard.on('success', function(e) {
    alert('复制成功!')
    e.clearSelection();
});
clipboard.on('error', function(e) {
    alert('请选择“拷贝”进行复制!')
//尝试去掉alert,能弹出系统的“拷贝”工具,但是需要点击两次按钮才能弹出,具体原因还不清楚,参考上图。有人说可以试一下在触发的地方写一个空点击事件, onclick="" 因为ios不单纯支持on事件
});

注:参考jq在ios的on事件失效
https://blog.csdn.net/qq_21119773/article/details/53996514

在ios的浏览器中出现一下情况:
绑定document,on事件失效
$(document).on('click','#weixin_btn,#close_box',function(){

})

解决方法1,最后加一行代码,如下
$("body").children().click(function(){})
-============------++++++++++++

解决方法2,
绑定到id(非document)上,on正常使用

$("#orderlist").on('click','.pingjia',function(e){
e.stopPropagation();
e.preventDefault();

})
+++++++++++ 个人参考 ++++++++++++++++++

 <script type="text/javascript">
    //复制
    var clipboard = new ClipboardJS('#btnClipboard', {
        target: function() { return document.getElementById('spnYXDHXAccno');}
    });
    clipboard.on('success', function(e) { NotyGenerate("success", "bottomCenter", "1500", "复制成功!"); });
    clipboard.on('error', function(e) {  });

    $('.panel-warning').find('li').on('click',function() {
        var _this = $(this).index();
        $(this).addClass('panel-table').siblings().removeClass('panel-table');
        $('.panel-cons').find('.panel-con').eq(_this).fadeIn(100).siblings().fadeOut(100);
    });
</script>
<script type="text/javascript">
    $(document).ready(function () {
        //读取浏览器信息
        nBrowserType = 5; //其它浏览器
        if (IsIphoneOS()) {
            nBrowserType = 2; //Iphone 浏览器
            if (IsWeiXin()) nBrowserType = 1; //Iphone 微信浏览器
        }
        else if (IsAndroid()) {
            nBrowserType = 4; //Android 浏览器
            if (IsWeiXin()) nBrowserType = 3; //Android 微信浏览器
        }
        $("#hfBrowserType").val(nBrowserType);
        $("#hfBrowserValue").val(navigator.userAgent.toLowerCase());
    });

    $('#btnSubmit').click(function () { return jForm_Check(); });
    function jForm_Check() {
         if (!/^([1-9][\d]{0,7}|0)(\.[\d]{1,2})?$/.test($("#tbMoney").val())) {
            NotyGenerate("warning", "bottomCenter", "1500", "请输入正确的金额!");
            $("#tbMoney").trigger("select");
            return false;
        }
        if (Number($("#tbMoney").val()) <= 0) {
            NotyGenerate("warning", "bottomCenter", "1500", "请输入大于 0 的金额!");
            $("#tbMoney").trigger("select");
            return false;
        }
    }
</script>

参考链接:
1.官方https://clipboardjs.com/(我使用火狐浏览器打开快点---添加了Decentraleyes这个组件)
2.https://blog.csdn.net/oaa608868/article/details/53539890
3.https://www.huoduan.com/clipboardjs.html
4.https://blog.csdn.net/ximenxiafeng/article/details/54632496
5.https://blog.csdn.net/hzmumu/article/details/79271464
6.https://www.jianshu.com/p/3f8867de041e(中的评论:对于不兼容ios的, 可以试一下在触发的地方写一个空点击事件, onclick="" 因为ios不单纯支持on事件)。

相关文章

  • Clipboard.js : 移动端复制到粘贴板兼容问题

    最近在项目中遇到这样一个需求:点击按钮,将指定的URL/字符串 复制到剪贴板,然后用户可以粘贴到其他地方。 方案一...

  • js实现复制到粘贴板方法

    js + clipboard 插件实现复制到粘贴板方法-兼容pc及移动端(ios/安卓) HTML: JS: 首先...

  • 粘贴板clipboard.js的使用方法

    粘贴板clipboard.js的使用方法 一、使用场景 在移动端开发的时候,有的应用需要用户拷贝页面的内容,方便用...

  • 纯JavaScript 代码,实现复制到剪贴板功能

    纯JS实现,支持移动端和PC。clipboard.js 引入clipboard.js html JS 具体可以查看...

  • vim之快捷键

    剪切 复制 将数据复制到系统粘贴板 参考文章:(ubuntu)终端复制到系统粘贴板和从系统粘贴板粘到vim的快捷键...

  • VB访问粘贴板

    Clipboard.Clear '清空粘贴板Clipboard.SetText XXX '将文本复制到粘贴板

  • xclip 粘贴管理工具

    xclip -i /etc/passwd 把文件复制到粘贴板上, xclip -o 输出粘贴板内容 watc...

  • document.execCommand()注意项

    在javascript中document.execCommand()方法是将文字复制到粘贴板,然后复制到其他地方使...

  • 移动端兼容问题

    1,ios软键盘弹出时候遮挡输入框 这类问题主要出现在input,textarea等输入框在页面底部的时候,ios...

  • vue-clipboards

    在vue中使用clipboard.js 时候发现一个问题,如果移动端不是input或者button,则复制不成功,...

网友评论

      本文标题:Clipboard.js : 移动端复制到粘贴板兼容问题

      本文链接:https://www.haomeiwen.com/subject/noablftx.html