फ़्लैश के बिना क्लिपबोर्ड पर कॉपी करें


90

मुझे क्लिपबोर्ड पर प्रतिलिपि बनाने के लिए कई समाधान मिले, लेकिन वे सभी या तो फ्लैश के साथ, या वेबसाइटों की ओर। मैं क्लिपबोर्ड पर स्वचालित रूप से, बिना फ्लैश और उपयोगकर्ता पक्ष के लिए विधि प्रतिलिपि की तलाश कर रहा हूं, यह उपयोगकर्ताओं के लिए और निश्चित रूप से क्रॉस-ब्राउज़र के लिए है।


कोई भी नहीं मिला, उसी चीज की तलाश में था। क्या फ्लैश का उपयोग करना चाहता था या तो इस सुविधा को पूर्व निर्माण हटा दिया।
यूजीनके

2
डुप्लिकेट stackoverflow.com/questions/400212/...
wizztjh

1
फ्लैश का उपयोग किए बिना मुझे संदेह है कि आप इसे विभिन्न ब्राउज़रों में कर सकते हैं। लेकिन ठोस समाधान उपलब्ध हैं जो आपको समाधान ज़ीरोक्लिपबोर्ड
राकेश शंकर

राकेश - आपका "ठोस समाधान" फ्लैश पर आधारित है। यह मेरे द्वारा उपयोग किए जाने वाले किसी भी ब्राउज़र में काम नहीं करेगा।
RobG

1
में @wizztjh विधि stackoverflow.com/questions/400212/... साइट पक्ष उपयोगकर्ता पक्ष @Rakesh के लिए नहीं करने के लिए है zeroclipboard अच्छा है, लेकिन मैं पूरी तरह से बिना फ्लैश विधि खोजना चाहते हैं
Black_Sun

जवाबों:


31

फ्लैश के बिना, यह ज्यादातर ब्राउज़र में संभव नहीं है। उपयोगकर्ता का क्लिपबोर्ड एक सुरक्षा-प्रासंगिक संसाधन है क्योंकि इसमें पासवर्ड या क्रेडिट कार्ड नंबर जैसी चीजें शामिल हो सकती हैं। इस प्रकार, ब्राउज़र सही तरीके से जावास्क्रिप्ट का उपयोग करने की अनुमति नहीं देते हैं (कुछ यह चेतावनी के साथ अनुमति देते हैं कि उपयोगकर्ता ने पुष्टि की है, या हस्ताक्षर किए गए जावास्क्रिप्ट कोड के साथ, लेकिन इनमें से कोई भी क्रॉस-ब्राउज़र नहीं है)।


21
तो हो सकता है कि पेज क्लिपबोर्ड से पढ़ने में सक्षम न हों, लेकिन इसे क्यों न लिखें? = /
Ajedi32

5
लेकिन फिर इसे एक छिपे हुए फ्लैश के माध्यम से क्यों होने दिया जाए जिसमें शून्य उपयोगकर्ता अधिसूचना और प्रतिक्रिया शामिल है?
एरिक ग्रेंज

3
@EricGrange: क्योंकि 1990 के दशक के मध्य में नेटस्केप में किसी ने निर्णय लिया था कि प्रदर्शन कारणों से, ब्राउज़र प्लगइन्स मूल बायनेरिज़ होंगे और इस प्रकार बहुत कुछ करने में सक्षम होंगे। ऑनलाइन दुनिया तब तक एक साधारण जगह थी, और सुरक्षा चिंता का विषय नहीं थी।
माइकल बोर्गवर्ड

4
जबकि यह जवाब 2011 में सही था, ब्राउज़र फ्लैश को मारने की लड़ाई में एक लंबा सफर तय कर चुके हैं। कृपया मेरा जवाब नीचे देखें।
होविस बिडल

25

मैंने फ्लैश समाधान का प्रयास किया था और मुझे भी पसंद नहीं आया। बहुत जटिल और बहुत धीमा। मैंने जो किया वह एक टेक्स्टएरिया बनाने के लिए था, उसमें डेटा डाला और ब्राउज़र "CTRL + C" व्यवहार का उपयोग किया।

JQuery का जावास्क्रिप्ट हिस्सा:

// catch the "ctrl" combination keydown
$.ctrl = function(key, callback, args) {
    $(document).keydown(function(e) {
        if(!args) args=[]; // IE barks when args is null
        if(e.keyCode == key && e.ctrlKey) {
            callback.apply(this, args);
            return false;
        }
    });
};

// put your data on the textarea and select all
var performCopy = function() {
    var textArea = $("#textArea1");
    textArea.text('PUT THE TEXT TO COPY HERE. CAN BE A FUNCTION.');
    textArea[0].focus();
    textArea[0].select();
};

// bind CTRL + C
$.ctrl('C'.charCodeAt(0), performCopy);

HTML भाग:
<textarea id="textArea1"></textarea>

अब, आप यहाँ 'कॉपी टू कॉपी कॉपी' में कॉपी करना चाहते हैं। एक समारोह हो सकता है। ' क्षेत्र। मेरे लिए ठीक काम करता है। आपको बस एक CTRL + C संयोजन बनाना है। एकमात्र दोष यह है कि आप एक बदसूरत textarea है कि आप साइट में प्रदर्शित करने जा रहे हैं। यदि आप शैली का उपयोग करते हैं = "प्रदर्शन: कोई नहीं" प्रतिलिपि समाधान काम नहीं करेगा।


6
ऐसा लगता है कि केवल Ctrl + C के फ़ंक्शन को जावास्क्रिप्ट फ़ंक्शन में बाँधना है और डेटा को OS क्लिपबोर्ड में नहीं रखना है।
इश्माएल

यकीन है, इस विचार है। आपके लिए ब्राउज़र की प्रतिलिपि बनाएँ। यहाँ एक समान समाधान है: knockoutjs.com/examples/clickCounter.html । जब आप डबल-क्लिक करते हैं तो वे सामग्री के साथ जावास्क्रिप्ट द्वारा एक पाठ-क्षेत्र बनाते हैं।
जूलियो सैटो

मेरे लिए ओएक्सएक्स पर काम नहीं किया इसलिए मैंने e.metaKeyकीडाउन तुलना में जोड़ा , लेकिन किसी कारण से, प्रतिलिपि कार्रवाई को ट्रिगर नहीं किया गया है। इस
फिडेल को

2
@GabLeRoux सफारी में प्रतिलिपि फ़ंक्शन केवल तभी सक्षम होता है जब पाठ का चयन किया जाता है। यह पहले काम करता था लेकिन सफारी के लिए एक अपडेट ने हाल ही में इसे बंद कर दिया है। ऐसा लगता है कि कुंजी डाउन ईवेंट कहे जाने के बाद पाठ का चयन करना बस उस ब्राउज़र में कटौती नहीं करता है। फिर भी क्रोम में ठीक काम करता है। ओह ठीक है, बस उस ब्राउज़र के लिए फ्लैश का उपयोग करने के लिए वापस गिर सकता है ....
अरन मुल्होलैंड

इस प्रकार सं। जब आप (किसी भी कारण से) किसी तत्व को छिपा नहीं सकते, जिसे आपको देखने की आवश्यकता नहीं है, तो आप हमेशा शुरुआत से दूर रख सकते हैं, जैसे गद्दी-नीचे: -1000।
m3nda


10

यह अंत में यहाँ है! (जब तक आप सफारी या IE8 का समर्थन नहीं करते ... -_-)

अब आप वास्तव में फ्लैश के बिना क्लिपबोर्ड कार्यों को संभाल सकते हैं। यहाँ प्रासंगिक दस्तावेज है:

https://developer.mozilla.org/en-US/docs/Web/API/Document/execCommand

https://developers.google.com/web/updates/2015/04/cut-and-copy-commands?hl=en

https://msdn.microsoft.com/en-us/library/hh801227%28v=vs.85%29.aspx#copy


3

जबकि बेसब्री से इंतजार कर के Xbrowser समर्थन के लिए क्लिपबोर्ड एपीआई ...


यह क्रोम, फ़ायरफ़ॉक्स, एज, IE में खूबसूरती से काम करेगा

IE क्लिपबोर्ड का उपयोग करने के लिए केवल एक बार उपयोगकर्ता को संकेत देगा।
सफारी (लेखन के समय 5.1) के लिए समर्थन नहीं करता execCommandहैcopy/cut

/**
 * CLIPBOARD
 * https://stackoverflow.com/a/33337109/383904
 */
const clip = e => {
  e.preventDefault();
  
  const cont = e.target.innerHTML;
  const area = document.createElement("textarea");
  
  area.value = e.target.innerHTML; // or use .textContent
  document.body.appendChild(area);
  area.select();
 
  if(document.execCommand('copy')) console.log("Copied to clipboard");
  else prompt("Copy to clipboard:\nSelect, Cmd+C, Enter", cont); // Saf, Other
  
  area.remove();
};


[...document.querySelectorAll(".clip")].forEach(el => 
  el.addEventListener("click", clip)
);
<a class="clip" href="#!">Click an item to copy</a><br>
<a class="clip" href="#!"><i>Lorem</i></a><br>
<a class="clip" href="#!"><b>IPSUM</b></a><br>

<textarea placeholder="Paste here to test"></textarea>

सभी ब्राउज़रों (फ़ायरफ़ॉक्स को छोड़कर जो केवल माइम संभाल करने में सक्षम है टाइप "plain/text"जहाँ तक मैं परीक्षण किया है) है लागू नहीं किया क्लिपबोर्ड एपीआई । यानी, क्रोम का उपयोग करके क्लिपबोर्ड ईवेंट को पढ़ने की कोशिश कर रहा है

var clipboardEvent = new ClipboardEvent("copy", {
        dataType: "plain/text",
        data: "Text to be sent to clipboard"
});

फेंकता है: अनकहा टाइप टाइप: अवैध कंस्ट्रक्टर

ब्राउज़रों और क्लिपबोर्ड के बीच होने वाले अविश्वसनीय गड़बड़ का सबसे अच्छा संसाधन यहां देखा जा सकता है (caniuse.com) (→ "नोट्स" के तहत टिप्पणियों का पालन करें )।
MDN का कहना है कि बुनियादी समर्थन सभी ब्राउज़रों के लिए "(YES)" है , जो गलत है क्योंकि कम से कम एपीआई को काम करने की उम्मीद होगी।


1

आप HTML पृष्ठ पर स्थानीय क्लिपबोर्ड का उपयोग कर सकते हैं। यह आपको HTML पृष्ठ पर सामग्री को कॉपी / कट / पेस्ट करने की अनुमति देता है, लेकिन / से तीसरे पक्ष के अनुप्रयोगों के बीच या दो HTML पृष्ठों के बीच नहीं।

यह है कि आप ऐसा करने के लिए एक कस्टम फ़ंक्शन कैसे लिख सकते हैं (क्रोम और फ़ायरफ़ॉक्स में परीक्षण किया गया है):

यहाँ FIDDLE है जो दर्शाता है कि आप यह कैसे कर सकते हैं।

मैं संदर्भ के लिए यहाँ भी फ़ाइडल पेस्ट करूँगा।


एचटीएमएल

<p id="textToCopy">This is the text to be copied</p>
<input id="inputNode" type="text" placeholder="Copied text will be pasted here" /> <br/>

<a href="#" onclick="cb.copy()">copy</a>
<a href="#" onclick="cb.cut()">cut</a>
<a href="#" onclick="cb.paste()">paste</a>

जे एस

function Clipboard() {
    /* Here we're hardcoding the range of the copy
    and paste. Change to achieve desire behavior. You can
    get the range for a user selection using
    window.getSelection or document.selection on Opera*/
    this.oRange = document.createRange();
    var textNode = document.getElementById("textToCopy");
    var inputNode = document.getElementById("inputNode");
    this.oRange.setStart(textNode,0);
    this.oRange.setEndAfter(textNode);
    /* --------------------------------- */
}

Clipboard.prototype.copy = function() {
    this.oFragment= this.oRange.cloneContents();
};

Clipboard.prototype.cut = function() {
    this.oFragment = this.oRange.extractContents();
};

Clipboard.prototype.paste = function() {
    var cloneFragment=this.oFragment.cloneNode(true)
    inputNode.value = cloneFragment.textContent;
};

window.cb = new Clipboard();

हे mtBrona वहाँ एक तरह से यू इस के लिए कुछ jsfiddle संलग्न करेंगे? यह सक्रिय करने के लिए प्रतीत नहीं हो सकता है
neoswf

क्या हम यहां एलिमेंट के स्थान पर स्ट्रिंग पास कर सकते हैं
उदय ए। नवापारा

यह काम करता है केवल आप उसी के अंदर हैं window। यह OS और दूसरे ब्राउज़र टैब के लिए उपलब्ध वास्तविक क्लिपबोर्ड नहीं है। इसके अलावा चयन आसानी select()से और बस से किया जा सकता हैwindow.getSelection()
रोको सी। Buljan

0

document.execCommand('copy')जो चाहोगे, करोगे। लेकिन cruft के बिना इस धागे में सीधे प्रयोग करने योग्य उदाहरण नहीं थे, इसलिए यहां यह है:

var textNode = document.querySelector('p').firstChild
var range = document.createRange()
var sel = window.getSelection()

range.setStart(textNode, 0)
range.setEndAfter(textNode)
sel.removeAllRanges()
sel.addRange(range)
document.execCommand('copy')

-2

चारों ओर रास्ता नहीं है, आपको फ्लैश का उपयोग करना होगा। एक jQuery प्लगइन है, जिसे jquery.copy कहा जाता है, जो फ़्लैश (swf) फ़ाइल का उपयोग करके क्रॉस ब्राउज़र कॉपी और पेस्ट प्रदान करता है। यह मेरे ब्लॉग पर वाक्य रचना हाइलाइटर के समान है।

एक बार जब आप jquery.copy.js फ़ाइल का संदर्भ लेते हैं, तो आपको क्लिपबोर्ड में डेटा पुश करने के लिए सभी की आवश्यकता होती है:

$.copy("some text to copy");

अच्छा और आसान ;)


लिंक टूटी हुई है (फाइलें अब डाउनलोड के लिए नहीं हैं)
सीनोपाइस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.