clipboard.js 踩坑

由於最近產品的需求,要在移動端 實現複製功能,我就知道是個坑。看以前同事的代碼 引用的:clipboard.js 看了一個github,感受是一個成熟的插件了,因而放心的使用了。css

<!--引用-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script>

<!--html-->
<div class="btn" data-clipboard-text="Just because you can doesn't mean you should — clipboard.js">
    Copy to clipboard
</div>

<script>
var clipboard = new ClipboardJS('.btn');

clipboard.on('success', function(e) {
    console.info('Action:', e.action);
    console.info('Text:', e.text);
    console.info('Trigger:', e.trigger);

    e.clearSelection();
});

clipboard.on('error', function(e) {
    console.error('Action:', e.action);
    console.error('Trigger:', e.trigger);
});
</script>
複製代碼

差不都是這樣,引用以前同事實踐過,我也沒在手機上細測,畢竟人家前一輪經過測試了啊。而後果真,要發佈的時候測試說,安卓上測試不了呢,,,what?前一輪怎麼測試的?我哭了,網上百度各類方法(各類ios android不兼容),一個較多的說法是 使用div等非 input textarea複製時會出現複製失敗的狀況(這時其實我沒有注意問測試用的哪一個瀏覽器)。 而後就改了input的使用方法html

<!-- Target -->
<input id="foo" value="https://github.com/zenorocha/clipboard.js.git" style="z-index:-1;position:absulote;top:-1000px;left:-1000px;">

<!-- Trigger -->
<button class="btn" data-clipboard-target="#foo">
    <img src="assets/clippy.svg" alt="Copy to clipboard">
</button>
複製代碼

差很少這樣 就是把input隱藏顯示了。而後試了下,ios好的,安卓也是能夠的。因而發佈測試。。。而後測試的小米手機和華爲手機不知道什麼瀏覽器複製成功了,可是出現了調起軟鍵盤的現象,個人ios沒有,顯然測試但願我隱藏掉。。。因而百度阻止調起鍵盤的狀況,而後我是這麼寫的。android

<script>
<!--位置一-->
$("input").focus(function(){
    document.activeElement.blur();
});
<!---->
var clipboard = new ClipboardJS('.btn');

clipboard.on('success', function(e) {
    console.info('Action:', e.action);
    console.info('Text:', e.text);
    console.info('Trigger:', e.trigger);
    alert('成功')
    e.clearSelection();
});

clipboard.on('error', function(e) {
    alert('失敗')
    console.error('Action:', e.action);
    console.error('Trigger:', e.trigger);
});

<!--位置二-->
$("input").focus(function(){
    document.activeElement.blur();
});
<!---->
</script>
複製代碼

發現顯示成功,可是複製了奇怪的dom。。想哭。ios

而後我又去百度使用div的狀況發現人家說的是ios打不開而我是安卓有問題,因此我以爲方法可能沒問題 我要針對的測試一下, 因而又改回第一種寫法,針對ios和安卓的瀏覽器認真的測試了一下,結果以下: 個人ios 11.3 微信 ok; safari:ok;uc:成功 測試的小米手機 微信ok 自帶瀏覽器:ok;uc:失敗 可是有一點就是uc觸發了error事件,但實際剪切板是剪貼到了內容的。。。。原本想說反正都讀到了,就把提示改爲成功吧(竊喜)。開開心心的發佈測試。 你覺得會這麼順利嗎????!固然不可能,那我幾天就不會寫這個文檔記錄了。問題是測試的ios12.2 uc觸發error事件了, 可是沒有複製到內容。看github上的issues果真又說not work >ios12。更多的是說have problem in UC brower。。果真是差很少的狀況,而後做者說他沒辦法,,,可是國內其實UC仍是不少人用的。真想罵人,雖然我用安卓手機的時候 也是UC的使用者。。。調試發現雖然複製失敗可是其實console.error('Trigger:', e.trigger)是正確的;而後說用這個事件 就試試。git

<!--我用了jq-->
new ClipboardJS('.btn', {
    text: function(trigger) {
        return $(trigger).data("clipboard-text")
    }
});
複製代碼

發現uc仍是沒法複製到剪貼板。。github

而後又不能不用啊。。。就只能想代替方案。web

this.clipboard.on("success", function(e){
        console.info('Action:', e.action);
        console.info('Text:', e.text);
        console.info('Trigger:', e.trigger);
        e.clearSelection();
    });
    // ClipboardJS安卓機有問題
    this.clipboard.on("error", function(e){
        console.error('Action:', e.action);
        console.error('Trigger:', e.trigger);
        $('.showCopy p').html($(e.trigger).data("clipboard-text"));
        $('.showCopy').show();
        $('.js_mask1').show();
    });
    
            <!-- 複製失敗補償 -->
        <div class="showCopy">
            <h3>複製失敗,請長按複製</h3>
            <p></p>
            <div class="closed-btn js_closed_copy">關閉</div>
        </div>
         <!-- 複製失敗補償 -->
         
         .showCopy{
    display: none;
    position:fixed;
    top:50%;
    left: 50%;
    transform: translate(-50%,-50%);
    padding: 20px;
    z-index: 9999;
    -webkit-user-select:all;
	-moz-user-select:all;
	-o-user-select:all;
    user-select:all;
    background: #fff;
    
}
.showCopy p{
    padding: 5px 0;
    font-size: 16px;
}
.showCopy .closed-btn{
    margin: 10px auto 0;
    border: 1px solid red;
    padding: 4px 18px;
    width: 80px;
    color: red;
    font-size: 13px;
    border-radius: 4px;
    text-align: center;
}
複製代碼

是的 就是error的時候跳個彈框 手動複製..這個其實不難。可是我遇到的問題是其實不少項目 都會-webkit-user-select: none; 禁止長按事件這個須要手動複製衝突,因此就把css貼出來。 差很少就是這個方案了。。。。ajax

重點:垃圾UC/垃圾UC/垃圾UC/垃圾UC/垃圾UC瀏覽器

相關文章
相關標籤/搜索