2015-10-24 53 views

cevap

26

document.execCommand('copy') kullanıcı tarafından tetiklenen gerekir. Sadece konsoldan değil, kullanıcı tarafından tetiklenen bir olayın içinde olmayan bir yer. Aşağıya bakınca, tıklama etkinliği true olarak dönecektir, ancak etkinlik olmayan bir çağrı ve gönderilen bir olayda bir çağrı da olmaz.

console.log('no event', document.execCommand('bold')); 
 

 
document.getElementById('test').addEventListener('click', function(){ 
 
    console.log('user click', document.execCommand('copy')); 
 
}); 
 

 
document.getElementById('test').addEventListener('fakeclick', function(){ 
 
    console.log('fake click', document.execCommand('copy')); 
 
}); 
 

 

 
var event = new Event('fakeclick') 
 

 
document.getElementById('test').dispatchEvent(event) ;
<div id="test">click</ha>

Buraya bakın: https://w3c.github.io/editing/execCommand.html#dfn-the-copy-command

Kopya komutları (document.execCommand den tetiklenen) tek gerçek pano içeriğini etkileyecek olay bir den göndermesi halinde Kullanıcı tarafından güvenilen ve tetiklenen olay veya uygulaması buna izin verecek şekilde yapılandırılmışsa. Panoya yazma erişimine izin verecek şekilde yapılandırılmış uygulamaları, bu belirtimin kapsamı dışındadır.

2

Ben copy komut tarayıcısında odağı olan gerektirmektedir.END_PARAGRAPHSTART_PARAGRAPHPRODUCT_NAME inanıyoruz ve Console gidip komutu çalıştırdığınızda, geçerli pencere odak kaybeder. Ancak, setTimeout() numaralı telefondan verdiğimde işe yaradığı için başka sebepler olabilir.

3

Alternatif olarak, Chrome Dev araçlarına yerleşik olan copy() komutunu kullanın. document.execCommand("copy") kullanamazsınız, çünkü bu kullanıcının tetiklemesini gerektirir.

copy() komutu, herhangi bir dizeyi (veya JSON olarak) kopyalamanıza olanak sağlar. Aslında özellikle document.execCommand("copy") test etmek gerekirse

copy(getSelection().toString()) 

screen shot

(örneğin, bunu kullanan bir komut dosyası hata ayıklama) ve ayıklayıcı bir bedeli kullanarak: document.execCommand("copy") taklit için, getSelection().toString() ile geçerli seçimi alabilirsiniz 't İdeal nedense, bir tıklama işleyicisi kodunuzu sarın ve sonra sayfanızı tıklayabilir:

document.body.addEventListener("click", function() { 
    console.log("copy", document.execCommand("copy")); 
}, false); 
+0

kopyala son sürümünde çalışıyor? –

+1

@PraveenKumar - Güncel seçimi getSelection(). ToString() 'ile alın. Cevabımı düzenledim. – gilly3

0

Bu yöntem geçerli seçimi safari

const copyUrl = (url, cb) => { 
    try { 
    var input = document.getElementById('copyInput') 
    input.value = url 
    input.focus() 
    input.select() 
    if (document.execCommand('copy', false, null)) { 
     Message('复制成功') 
    } else { 
     Message({ 
     message: '当前浏览器不支持复制操作,请使用Ctrl+c手动复制', 
     type: 'warning' 
     }) 
    } 
    } catch (e) { 
    Message({ 
     message: `复制出错:${e}`, 
     type: 'error' 
    }) 
    } 
}