2015-10-24 15 views
16

क्रोम डेवलपर कंसोल से document.execCommand('copy'); कॉलिंग false हर बार देता है।`document.execCommand ('copy') का उपयोग नहीं कर सकता;` डेवलपर कंसोल से

इसे स्वयं आज़माएं। कंसोल खोलें और इसे चलाएं, यह कभी सफल नहीं होता है।

कोई विचार क्यों?

enter image description here

उत्तर

26

document.execCommand('copy') उपयोगकर्ता से शुरू हो रहा होना चाहिए। यह केवल कंसोल से नहीं है, यह कहीं भी है जो उपयोगकर्ता द्वारा ट्रिगर किए गए किसी ईवेंट के अंदर नहीं है। नीचे देखें, क्लिक इवेंट सही हो जाएगा, लेकिन ईवेंट के बिना कॉल नहीं होगा और एक प्रेषित ईवेंट में भी कॉल नहीं होगा।

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>

यहाँ देखें: https://w3c.github.io/editing/execCommand.html#dfn-the-copy-command

कॉपी आदेशों document.execCommand से शुरू हो रहा() केवल असली क्लिपबोर्ड की सामग्री को प्रभावित करेगा अगर घटना एक से भेजा जाता है घटना जो उपयोगकर्ता द्वारा भरोसा और ट्रिगर होती है, या यदि कार्यान्वयन को अनुमति देने के लिए कॉन्फ़िगर किया गया है। इस विनिर्देश के दायरे के बाहर क्लिपबोर्ड पर लेखन पहुंच की अनुमति देने के लिए कॉन्फ़िगर किया गया कैसे कार्यान्वित किया जा सकता है।

2

मुझे विश्वास है, copy आदेश ब्राउज़र पर ध्यान केंद्रित होने के लिए आवश्यक है, और जब आप कंसोल के लिए जाने के लिए और आदेश पर अमल, वर्तमान विंडो ध्यान केंद्रित खो देता है। लेकिन अन्य कारण भी हो सकते हैं, क्योंकि अगर मैं setTimeout() में देता हूं तो यह काम करता है।

3

एक विकल्प के रूप में, क्रोम देव उपकरण में बनाए गए copy() कमांड का उपयोग करें। आप document.execCommand("copy") का उपयोग नहीं कर सकते क्योंकि इसे उपयोगकर्ता को ट्रिगर करने के लिए आवश्यक है।

copy() कमांड आपको किसी स्ट्रिंग (या जेएसओएन के रूप में ऑब्जेक्ट) की प्रतिलिपि बनाने की अनुमति देता है। document.execCommand("copy") का अनुकरण करने के लिए आप getSelection().toString() साथ वर्तमान चयन प्राप्त कर सकते हैं:

copy(getSelection().toString()) 

screen shot

आप वास्तव में विशेष रूप से document.execCommand("copy") का परीक्षण करने की जरूरत है (उदाहरण के लिए, एक स्क्रिप्ट यह का उपयोग करता है डिबग करने के लिए), और डिबगर प्रतिसाद नहीं का उपयोग कर 'टी आदर्श किसी कारण से, आप एक क्लिक हैंडलर में अपने कोड लपेट कर सकते हैं, और फिर अपने पेज पर क्लिक करें:

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

कॉपी नवीनतम संस्करण में काम करता है? –

+1

@PraveenKumar - 'getSelection()। ToString() 'के साथ वर्तमान चयन प्राप्त करें। मेरा जवाब संपादित किया। – gilly3

0

इस विधि वर्तमान चयन की सफारी

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' 
    }) 
    } 
} 
संबंधित मुद्दे