2016-12-12 9 views
5

के अंदर से नहीं कहा गया था, मैं एक-पेज ऐप विकसित कर रहा हूं, मेरे पास पृष्ठ पर एक बटन है , जब कोई उपयोगकर्ता बटन पर क्लिक करता है तो मैं अपने सर्वर पर AJAX कॉल करना चाहता हूं, और फिर उपयोगकर्ता के क्लिपबोर्ड पर लौटाए गए मूल्य (कॉलबैक के माध्यम से) की प्रतिलिपि बनाना चाहता हूं।फ़ायरफ़ॉक्स - document.execCommand ('cut'/'copy') अस्वीकार कर दिया गया था क्योंकि इसे एक छोटे से चल रहे उपयोगकर्ता द्वारा जेनरेट किए गए ईवेंट हैंडलर

अलगाव में प्रत्येक घटक काम करता है, लेकिन जब मैं उन्हें गोंद एक साथ फ़ायरफ़ॉक्स निम्नलिखित त्रुटि देता है:

document.execCommand(‘cut’/‘copy’) was denied because it was not called from inside a short running user-generated event handler

मैं इस त्रुटि की बारीकियों जानना चाहते हैं, लेकिन वहाँ बिल्कुल कोई जानकारी ऑनलाइन है, इस त्रुटि को ट्रिगर करने वाली सीमित स्थितियां क्या हैं, क्या यह एक स्टैक गहराई, एक टाइमआउट आदि है?

+3

सामान्य विचार यह है कि ब्राउज़र आप सीधे * में छोड़कर क्लिपबोर्ड हेरफेर करने के लिए नहीं चाहता है * उपयोगकर्ता द्वारा जेनरेट की गई घटना (जैसे एक बटन क्लिक) के लिए प्रतिक्रिया। लेकिन एक अजाक्स कॉल असीमित है और इसलिए जब तक प्रतिक्रिया प्राप्त होती है तो मूल क्लिक ईवेंट समाप्त हो जाता है। आप संभवतः एक और बटन "क्लिपबोर्ड पर प्रतिलिपि परिणाम" (या इसी तरह) के साथ परिणाम स्क्रीन पर प्रदर्शित कर सकते हैं। (यह उपयोगकर्ता के लिए भी अच्छा है, क्योंकि यह क्लिपबोर्ड को उनके एहसास किए बिना ओवरराइट नहीं करता है।) – nnnnnn

उत्तर

1

यह क्रियान्वित user event प्रसंस्करण पूरा होने के बाद के लिए async अनुरोध के साथ अपने execCommand('cut'/'copy') कॉल लपेटें। $.Deferred साथ

उदाहरण:

function asyncCall() { 
    return $.Deferred().resolve().promise(); 
} 

asyncCall().then(function() { 
    var supported = document.queryCommandSupported('copy'); 
    if (supported) { 
     // ... select action 
     document.execCommand('copy'); 
    } 
}); 
+1

यह काम नहीं करता है। यदि यह अभी भी आपके लिए काम करता है, तो प्लंबर प्रदान करने पर विचार करें? –

संबंधित मुद्दे

 संबंधित मुद्दे