2017-06-27 26 views
5

Bazı metni koymak için gizli bir metin alanı kullanıyorum, onu seçin ve document.execCommand kullanarak panoya kopyalayın. Bu genellikle çalışır, ancak metin büyük olduğunda başarısız olur (false döndürür). Chrome v55'te, 180.000 karakterde başarısız gibi görünüyor.document.execCommand ('copy') ile panoya kopyalamak büyük metinler ile başarısız olur

Bu şekilde kopyalanabilen veri miktarı için bir sınır var mı? Normal Ctrl + C, aynı sınırlamalara tabi görünmüyor.

note: Biri bunu Does document.execCommand('copy') have a size limitation?'un olası bir kopyası olarak işaretledi. Benzer bir soru da olabilir, fakat bu, kullanmadığım belirli bir çerçeve olarak etiketlendi ve ayrıca yanıtlanmadı. Sanırım sorum daha genel ve hala alakalı.

Referans kodunu ekleyin.

 function copyTextToClipboard(text) { 
     var textArea = document.createElement('textarea'); 
     textArea.style.position = 'fixed'; 
     textArea.style.top = 0; 
     textArea.style.left = 0; 
     textArea.style.width = '2em'; 
     textArea.style.height = '2em'; 
     textArea.style.padding = 0; 
     textArea.style.border = 'none'; 
     textArea.style.outline = 'none'; 
     textArea.style.boxShadow = 'none'; 
     textArea.style.background = 'transparent'; 
     textArea.value = text; 
     document.body.appendChild(textArea); 
     textArea.select(); 
     try { 
      var successful = document.execCommand('copy'); 
      var msg = successful ? 'successful' : 'unsuccessful'; 
      console.log('Copying text command was ' + msg); 
     } catch (err) { 
      console.log('Oops, unable to copy'); 
     } 
     document.body.removeChild(textArea); 
     } 
+0

Olası kopyalar https://stackoverflow.com/questions/43641182/does-document-execcommandcopy- boyut-sınırlama var) –

+1

Düzenleme konusuna bakın. Bu soru çözülmedi. –

cevap

4

sorun execCommand('copy') çağrı kendisinden daha bu uzun metin oluşturmak için gereken süre ile ilgisi vardır.

document.execCommand (‘kesmek’/‘kopya’) kısa bir koşu kullanıcı tarafından oluşturulan olay işleyicisi içinden çağrılmadı çünkü reddedildi:

Firefox bir çok açıklayıcı hata mesajı yükseltir.

Kodunuz metnini oluşturmak için çok uzun sürüyor ve böylece tarayıcı olarak tanır etmeyen bir yarı güvenilen olay ...

çözüm öncelikle bu metni oluşturmak için daha sonra, ve sadece execCommand numaralı telefonu aramak için bir kullanıcı hareketini dinledikten sonra. Yani bunu mümkün kılmak için, ör. Metni oluşturmak için mousedown olayını dinleyin ve sadece mouseup olayında gerçekten kopya komutunu yürüteceksiniz.

const text = ('some text a bit repetitive ' + Date.now()).repeat(50000); 
 

 
function copyTextToClipboard(text) { 
 
    // first we create the textArea 
 
    var textArea = document.createElement('textarea'); 
 
    textArea.style.position = 'absolute'; 
 
    textArea.style.opacity = '0'; 
 
    textArea.value = text; 
 
    document.body.appendChild(textArea); 
 

 
    var execCopy = e => { // triggered on mouseup 
 
    textArea.select(); 
 
    var successful = document.execCommand('copy'); 
 
    var msg = successful ? 'successful' : 'unsuccessful'; 
 
    console.log('Copying text command was ' + msg); 
 
    document.body.removeChild(textArea); 
 
    }; 
 
    // here the magic 
 
    btn.addEventListener('mouseup', execCopy, { 
 
    once: true 
 
    }); 
 
} 
 
// triggered on mousedown 
 
btn.onmousedown = e => copyTextToClipboard(text);
<button id="btn">copy some text in your clipboard</button> 
 
<p>May struggle your browser a little bit, it's quite a long text... Please be patient</p>

[mu document.execCommand ('kopya') bir boyutu sınırlaması?] (Içinde
İlgili konular