আমি কীভাবে জাভাস্ক্রিপ্টের ক্লিপবোর্ডে অনুলিপি করব?


3314

ক্লিপবোর্ডে পাঠ্য অনুলিপি করার সর্বোত্তম উপায় কী? (বহু-ব্রাউজার)

আমি চেষ্টা করেছি:

function copyToClipboard(text) {
    if (window.clipboardData) { // Internet Explorer
        window.clipboardData.setData("Text", text);
    } else {  
        unsafeWindow.netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");  
        const clipboardHelper = Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper);  
        clipboardHelper.copyString(text);
    }
}

তবে ইন্টারনেট এক্সপ্লোরারে এটি একটি সিনট্যাক্স ত্রুটি দেয়। ফায়ারফক্সে, এটি বলেছে unsafeWindow is not defined

ফ্ল্যাশ ছাড়াই একটি দুর্দান্ত কৌশল: ট্রেলো কীভাবে ব্যবহারকারীর ক্লিপবোর্ডে অ্যাক্সেস করতে পারেন?


শুধু কৌতূহল, আপনি ক্লিপবোর্ডে অনুলিপি করতে চান যা ব্যবহারকারী নিজেরাই করতে পারে না?
স্কানলিফ

233
বিশেষ কিছু না. তারা নিজেরাই এটি করতে পারে তবে আমি পাঠ্যের সঠিক অংশটি বেছে নেওয়ার বিষয়ে চিন্তা না করে কোনও বোতামে ক্লিক করার সম্ভাবনাও অফার করতে চাই।
সান্টিয়াগো Corredoira


এটি IE এর পাশাপাশি এফএফ
জগদীশ

1
যদি আমরা ব্যবহারকারীর ক্লিপবোর্ডে পাঠ্য রাখতে পারি তবে আমরা তার ক্লিপবোর্ডটি নষ্ট করতে পারি।
ফ্র্যাঙ্ক ফ্যাং

উত্তর:


2237

সংক্ষিপ্ত বিবরণ

ক্লিপবোর্ডে অনুলিপি করার জন্য তিনটি প্রাথমিক ব্রাউজারের এপিআই রয়েছে:

  1. Async ক্লিপবোর্ড এপিআই [navigator.clipboard.writeText]
    • ক্রোম 66 (মার্চ 2018) এ পাঠ্য-কেন্দ্রিক অংশ উপলব্ধ
    • অ্যাক্সেস অ্যাসিঙ্ক্রোনাস এবং জাভাস্ক্রিপ্ট প্রতিশ্রুতি ব্যবহার করে , এমনভাবে লেখা যেতে পারে যাতে সুরক্ষার ব্যবহারকারীদের অনুরোধ করা হয় (যদি প্রদর্শিত হয়) পৃষ্ঠাতে জাভাস্ক্রিপ্ট বাধা না দেয়।
    • কোনও চলক থেকে সরাসরি ক্লিপবোর্ডে পাঠ্য অনুলিপি করা যায়।
    • কেবল এইচটিটিপিএস-এ পরিবেশন করা পৃষ্ঠাগুলিতে সমর্থিত।
    • ক্রোমে সক্রিয় ট্যাবগুলিতে 66 পৃষ্ঠাগুলি কোনও অনুমতি ছাড়াই ক্লিপবোর্ডে লিখতে পারে।
  2. document.execCommand('copy')
    • বেশিরভাগ ব্রাউজারগুলি এপ্রিল 2015-এ সমর্থন করে (নীচে ব্রাউজার সমর্থন দেখুন)।
    • অ্যাক্সেস সিঙ্ক্রোনাস, অর্থাত্ কোনওরকম সুরক্ষা অনুরোধের সাথে ইন্টারফেস করা এবং ব্যবহারকারীর অন্তর্ভুক্ত হওয়া পর্যন্ত পৃষ্ঠাটিতে জাভাস্ক্রিপ্ট বন্ধ করে দেয়।
    • পাঠ্যটি ডিওএম থেকে পড়ে এবং ক্লিপবোর্ডে রাখা হয়।
    • পরীক্ষার সময় ~ এপ্রিল 2015 কেবলমাত্র ইন্টারনেট এক্সপ্লোরার ক্লিপবোর্ডে লেখার সময় অনুমতিগুলির অনুরোধ জানানো হিসাবে চিহ্নিত হয়েছিল।
  3. অনুলিপি ইভেন্টটি ওভাররাইড করা
    • ক্লিপবোর্ডের এপিআই ডকুমেন্টেশনটি অনুলিপি ইভেন্টকে ওভাররাইড করার জন্য দেখুন ।
    • যে কোনও অনুলিপি ইভেন্ট থেকে ক্লিপবোর্ডে যা প্রদর্শিত হবে তা সংশোধন করার অনুমতি দেয়, প্লেইন পাঠ্য ব্যতীত অন্য ফর্ম্যাটগুলিকে অন্তর্ভুক্ত করতে পারে।
    • এটি সরাসরি প্রশ্নের উত্তর দেয় না বলে এখানে আচ্ছাদিত নয়।

সাধারণ উন্নয়ন নোট

আপনি কনসোলে কোড পরীক্ষা করছেন এমন সময় ক্লিপবোর্ড সম্পর্কিত কমান্ডগুলি কাজ করার আশা করবেন না। সাধারণত পৃষ্ঠার সক্রিয় হওয়া প্রয়োজন (অ্যাসিঙ্ক ক্লিপবোর্ড এপিআই) বা document.execCommand('copy')ক্লিপবোর্ডে অ্যাক্সেসের জন্য ( ) ব্যবহারকারীর ইন্টারঅ্যাকশন প্রয়োজন (যেমন একটি ব্যবহারকারী ক্লিক) আরও বিশদের জন্য নীচে দেখুন।

গুরুত্বপূর্ণ (2020/02/20 এখানে উল্লিখিত)

নোট করুন যেহেতু এই পোস্টটি মূলত ক্রস-উত্সের আইএফআরএম এবং অন্যান্য আইএফআরএমে "স্যান্ডবক্সিং" এ এম্বেডড ডেমোগুলিকে "রান কোড স্নিপেট" বোতাম এবং "কোডেপেন.ইও উদাহরণ" কে কিছু ব্রাউজারে কাজ করা থেকে বিরত রেখেছে (ক্রোম এবং মাইক্রোসফ্ট এজ সহ) )।

আপনার নিজের ওয়েব পৃষ্ঠা তৈরি করতে বিকাশ করতে, সেই পৃষ্ঠাটি এইচটিটিপিএস সংযোগের মাধ্যমে পরীক্ষা করতে এবং এর বিরুদ্ধে বিকাশ করতে পরিবেশন করুন।

এখানে একটি পরীক্ষা / ডেমো পৃষ্ঠা যা কোডটি কাজ করে তা দেখায়: https://deanmarktaylor.github.io/clipboard-test/

অ্যাসিঙ্ক + ফলব্যাক

নতুন অ্যাসিঙ্ক ক্লিপবোর্ড এপিআইয়ের জন্য ব্রাউজারের স্তরের স্তরের কারণে আপনি সম্ভবত document.execCommand('copy')ভাল ব্রাউজারের কভারেজ পেতে পদ্ধতিটিতে ফ্যালব্যাক চাইবেন ।

এখানে একটি সহজ উদাহরণ (এই সাইটে এম্বেড থাকা কাজ নাও করতে পারে, উপরে "গুরুত্বপূর্ণ" নোট পড়ুন):

function fallbackCopyTextToClipboard(text) {
  var textArea = document.createElement("textarea");
  textArea.value = text;
  
  // Avoid scrolling to bottom
  textArea.style.top = "0";
  textArea.style.left = "0";
  textArea.style.position = "fixed";

  document.body.appendChild(textArea);
  textArea.focus();
  textArea.select();

  try {
    var successful = document.execCommand('copy');
    var msg = successful ? 'successful' : 'unsuccessful';
    console.log('Fallback: Copying text command was ' + msg);
  } catch (err) {
    console.error('Fallback: Oops, unable to copy', err);
  }

  document.body.removeChild(textArea);
}
function copyTextToClipboard(text) {
  if (!navigator.clipboard) {
    fallbackCopyTextToClipboard(text);
    return;
  }
  navigator.clipboard.writeText(text).then(function() {
    console.log('Async: Copying to clipboard was successful!');
  }, function(err) {
    console.error('Async: Could not copy text: ', err);
  });
}

var copyBobBtn = document.querySelector('.js-copy-bob-btn'),
  copyJaneBtn = document.querySelector('.js-copy-jane-btn');

copyBobBtn.addEventListener('click', function(event) {
  copyTextToClipboard('Bob');
});


copyJaneBtn.addEventListener('click', function(event) {
  copyTextToClipboard('Jane');
});
<div style="display:inline-block; vertical-align:top;">
  <button class="js-copy-bob-btn">Set clipboard to BOB</button><br /><br />
  <button class="js-copy-jane-btn">Set clipboard to JANE</button>
</div>
<div style="display:inline-block;">
  <textarea class="js-test-textarea" cols="35" rows="4">Try pasting into here to see what you have on your clipboard:

  </textarea>
</div>

(কোডেপেন.ও উদাহরণটি কাজ করতে পারে না, উপরে "গুরুত্বপূর্ণ" নোটটি পড়তে পারে) নোট করুন যে এই স্নিপেট স্ট্যাক ওভারফ্লো এর এম্বেড করা পূর্বরূপে ভাল কাজ করছে না আপনি এখানে চেষ্টা করে দেখতে পারেন: https://codepen.io/DeanMarkTaylor/pen/RMRaJX?editors = 1011

Async ক্লিপবোর্ড এপিআই

নোট করুন যে ক্রোম in 66 এর অনুমতিগুলি এপিআইয়ের মাধ্যমে ক্লিপবোর্ডে অ্যাক্সেসের জন্য "অনুমতি অনুরোধ করতে" এবং পরীক্ষা করার ক্ষমতা আছে an

var text = "Example text to appear on clipboard";
navigator.clipboard.writeText(text).then(function() {
  console.log('Async: Copying to clipboard was successful!');
}, function(err) {
  console.error('Async: Could not copy text: ', err);
});

document.execCommand ( 'কপি করো')

এই পোস্টের বাকি অংশগুলি document.execCommand('copy')API এর সংক্ষিপ্ত বিবরণ এবং বিশদে চলে যায় ।

ব্রাউজার সমর্থন

জাভাস্ক্রিপ্ট document.execCommand('copy')সমর্থন বৃদ্ধি পেয়েছে, ব্রাউজার আপডেটের জন্য নীচের লিঙ্কগুলি দেখুন:

সাধারণ উদাহরণ

(এই সাইটে এম্বেড থাকা কাজ করতে পারে না, উপরে "গুরুত্বপূর্ণ" নোট পড়ুন)

var copyTextareaBtn = document.querySelector('.js-textareacopybtn');

copyTextareaBtn.addEventListener('click', function(event) {
  var copyTextarea = document.querySelector('.js-copytextarea');
  copyTextarea.focus();
  copyTextarea.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');
  }
});
<p>
  <button class="js-textareacopybtn" style="vertical-align:top;">Copy Textarea</button>
  <textarea class="js-copytextarea">Hello I'm some text</textarea>
</p>

জটিল উদাহরণ: ইনপুট প্রদর্শন না করে ক্লিপবোর্ডে অনুলিপি করুন

উপরোক্ত সাধারণ উদাহরণটি দুর্দান্তভাবে কাজ করে যদি স্ক্রিনে কোনও উপাদান textareaবা inputউপাদান উপস্থিত থাকে।

কিছু ক্ষেত্রে আপনি ক্লিপবোর্ডে কোনও উপাদান input/ textareaউপাদান প্রদর্শন না করে কপিরাইট অনুলিপি করতে পারেন । এটি এটিকে ঘিরে কাজ করার একটি উদাহরণ (মূলত উপাদান সন্নিবেশ করা, ক্লিপবোর্ডে অনুলিপি করা, উপাদান সরানো):

গুগল ক্রোম 44, ফায়ারফক্স 42.0a1 এবং ইন্টারনেট এক্সপ্লোরার 11.0.8600.17814 দিয়ে পরীক্ষিত।

(এই সাইটে এম্বেড থাকা কাজ করতে পারে না, উপরে "গুরুত্বপূর্ণ" নোট পড়ুন)

function copyTextToClipboard(text) {
  var textArea = document.createElement("textarea");

  //
  // *** This styling is an extra step which is likely not required. ***
  //
  // Why is it here? To ensure:
  // 1. the element is able to have focus and selection.
  // 2. if element was to flash render it has minimal visual impact.
  // 3. less flakyness with selection and copying which **might** occur if
  //    the textarea element is not visible.
  //
  // The likelihood is the element won't even render, not even a
  // flash, so some of these are just precautions. However in
  // Internet Explorer the element is visible whilst the popup
  // box asking the user for permission for the web page to
  // copy to the clipboard.
  //

  // Place in top-left corner of screen regardless of scroll position.
  textArea.style.position = 'fixed';
  textArea.style.top = 0;
  textArea.style.left = 0;

  // Ensure it has a small width and height. Setting to 1px / 1em
  // doesn't work as this gives a negative w/h on some browsers.
  textArea.style.width = '2em';
  textArea.style.height = '2em';

  // We don't need padding, reducing the size if it does flash render.
  textArea.style.padding = 0;

  // Clean up any borders.
  textArea.style.border = 'none';
  textArea.style.outline = 'none';
  textArea.style.boxShadow = 'none';

  // Avoid flash of white box if rendered for any reason.
  textArea.style.background = 'transparent';


  textArea.value = text;

  document.body.appendChild(textArea);
  textArea.focus();
  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);
}


var copyBobBtn = document.querySelector('.js-copy-bob-btn'),
  copyJaneBtn = document.querySelector('.js-copy-jane-btn');

copyBobBtn.addEventListener('click', function(event) {
  copyTextToClipboard('Bob');
});


copyJaneBtn.addEventListener('click', function(event) {
  copyTextToClipboard('Jane');
});
<div style="display:inline-block; vertical-align:top;">
  <button class="js-copy-bob-btn">Set clipboard to BOB</button><br /><br />
  <button class="js-copy-jane-btn">Set clipboard to JANE</button>
</div>
<div style="display:inline-block;">
  <textarea class="js-test-textarea" cols="35" rows="4">Try pasting into here to see what you have on your clipboard:

  </textarea>
</div>

অতিরিক্ত নোট

ব্যবহারকারী যদি কোনও পদক্ষেপ নেয় কেবল তখনই কাজ করে

সমস্ত document.execCommand('copy')কল অবশ্যই ব্যবহারকারীর ক্রিয়া হিসাবে সরাসরি ফলাফল হিসাবে গ্রহণ করা উচিত, যেমন ইভেন্ট হ্যান্ডলার ক্লিক করুন। ব্যবহারকারীর ক্লিপবোর্ডের সাথে যখন তারা এটি আশা করে না তখন তাদের সাথে জগাখিচির প্রতিরোধের এমন একটি পদক্ষেপ।

দেখুন এখানে Google বিকাশকারী পোস্টে আরও তথ্যের জন্য।

ক্লিপবোর্ড এপিআই

নোট করুন সম্পূর্ণ ক্লিপবোর্ডের API খসড়া স্পেসিফিকেশনটি এখানে পাওয়া যাবে: https://w3c.github.io/clipboard-apis/

এটি কি সমর্থিত?

  • document.queryCommandSupported('copy')trueকমান্ডটি "ব্রাউজার দ্বারা সমর্থিত" হলে ফিরে আসা উচিত ।
  • এবং যদি এখন বলা হয় সফল হবে document.queryCommandEnabled('copy')ফিরে । কমান্ডটি ব্যবহারকারী-সূচিত থ্রেড থেকে ডেকে আনা হয়েছে এবং অন্যান্য প্রয়োজনীয়তা পূরণ হয়েছে তা নিশ্চিত করার জন্য পরীক্ষা করা হচ্ছে।truedocument.execCommand('copy')

তবে ব্রাউজারের সামঞ্জস্যতা সমস্যার উদাহরণ হিসাবে, গুগল ক্রোম ~ এপ্রিল থেকে অক্টোবর 2015 পর্যন্ত কেবলমাত্র কমান্ডটি কোনও ব্যবহারকারী-সূচিত থ্রেড থেকে ডাকলে ফিরে আসে truefromdocument.queryCommandSupported('copy')

নীচে সামঞ্জস্যতা বিশদ নোট করুন।

ব্রাউজার সামঞ্জস্য বিশদ

একজন ব্যবহারকারী ক্লিকের ফলস্বরূপ বলা document.execCommand('copy')একটি try/ catchব্লকে মোড়ানো একটি সাধারণ কলটি আপনাকে সর্বাধিক সামঞ্জস্যতার সাথে ব্যবহার করবে নীচের কয়েকটি প্রোভিস রয়েছে:

যে কোনও কল document.execCommand, document.queryCommandSupportedবা document.queryCommandEnabledএকটি try/ catchব্লকে মোড়ানো উচিত ।

বিভিন্ন ব্রাউজার বাস্তবায়ন এবং ব্রাউজার সংস্করণগুলি ফিরে আসার পরিবর্তে কল করা হলে বিভিন্ন ধরণের ব্যতিক্রম ছুঁড়ে দেয় false

বিভিন্ন ব্রাউজার বাস্তবায়ন এখনও ফ্লাক্সে রয়েছে এবং ক্লিপবোর্ডের এপিআই এখনও ড্রাফটে রয়েছে, তাই আপনার পরীক্ষাটি মনে রাখবেন।


41
কিভাবে একটি পরিবর্তনশীল তথ্য .ie থেকে সরাসরি কপি করা: var str = "word";?
jscriPoint

10
@ বুবুদাবা জেএসের <textarea>সাথে লুকানো একটি ডামি তৈরি করুন , এটিকে সংযোজন করুন document.body, এর মানটি পরিবর্তনশীলটিতে সেট করুন এবং গতিতে এটি ব্যবহার করুন copyTextarea, তারপরে সামগ্রীটি অনুলিপি করার পরে একে অপসারণ করুন।
SeinopSys

3
সাফারির জন্য কি এমন কোনও সূচক রয়েছে যা এটি সাফারিতে প্রয়োগ করা হবে?
www139

3
আমি খুঁজে পাওয়া একমাত্র সংস্করণ যা সমস্ত ব্রাউজারে কাজ করে। বুস্ট্র্যাপ মডেলে এটি ব্যবহার করার সময় আমি খুঁজে পেলাম মডেলের পাঠ্য অঞ্চলটি যুক্ত করতে হয়েছিল। আপনার সমাধানের জন্য আমি যদি +1000 দিতাম !!! ধন্যবাদ!
প্যাট্রিক

3
@ আয়সালামার মূল বক্তব্যটি হ'ল "অনুলিপি" ক্রিয়াটি কার্যকর করা সম্ভব না হয় যদি না এটি ব্যবহারকারী ক্রিয়া করছে এমন ব্রাউজারের কাছে উপস্থিত হয়। যদি উপাদানটি "প্রদর্শন: কিছুই নয়" দিয়ে স্টাইল করা হয় তবে ব্যবহারকারীরা পদক্ষেপ নিতে সক্ষম হবে না কারণ তারা এটি দেখতে সক্ষম হবে না বা এর সাথে ইন্টারঅ্যাক্ট করবে না।
ডিন টেলর

1255

ক্লিপবোর্ডে স্বয়ংক্রিয়ভাবে অনুলিপি করা বিপজ্জনক হতে পারে, তাই বেশিরভাগ ব্রাউজারগুলি (আইই বাদে) এটিকে খুব কঠিন করে তোলে। ব্যক্তিগতভাবে, আমি নিম্নলিখিত সহজ কৌশল ব্যবহার করি:

function copyToClipboard(text) {
  window.prompt("Copy to clipboard: Ctrl+C, Enter", text);
}

ব্যবহারকারীকে প্রম্পট বাক্সের সাথে উপস্থাপন করা হবে, যেখানে অনুলিপি করা পাঠটি ইতিমধ্যে নির্বাচিত হয়েছে। এখন এটি Ctrl+ Cএবং Enter(বাক্সটি বন্ধ করতে) টিপতে যথেষ্ট - এবং ভয়েলা!

এখন ক্লিপবোর্ডের অনুলিপি অপারেশনটি নিরাপদ, কারণ ব্যবহারকারী এটি ম্যানুয়ালি করে (তবে বেশ সরল ভাবে)। অবশ্যই, সমস্ত ব্রাউজারে কাজ করে।

<button id="demo" onclick="copyToClipboard(document.getElementById('demo').innerHTML)">This is what I want to copy</button>

<script>
  function copyToClipboard(text) {
    window.prompt("Copy to clipboard: Ctrl+C, Enter", text);
  }
</script>


91
চালাক, তবে এটি কেবল একক লাইনকে সমর্থন করে।
আরম কোচার্যান

61
"প্রম্পট" ফাংশনটি একটি কাস্টম মডেলে পরিবর্তন করা তুচ্ছ, কৌশলটির মাংসটি একটি সম্পাদনযোগ্য সামগ্রী ক্ষেত্র ব্যবহার করা এবং পাঠ্যটি প্রাক-নির্বাচন করা হয় এবং এটি ব্যবহারকারীর দ্বারা প্রয়োগের ফলে ব্রাউজারের ইউআই ভাঙা হয় না কর্ম তাদের। A ++
জন z

110
ক্লিপবোর্ডে অনুলিপি করতে এখনও জাভাস্ক্রিপ্ট ব্যবহার করছেন না ^ _ ^
রোজা

23
যদি আপনার পাঠ্যটি 2000 টি অক্ষরের বেশি হয় তবে এটি কেটে যাবে, তবে ছোট পাঠ্যের নমুনাগুলির জন্য এটি দুর্দান্ত কাজ করে
RasTheDestroyer

445
আশ্চর্যের বিষয় যে এটি 457 টি আপবোটস পেয়েছে যখন এটি প্রশ্নের উত্তর দেয় না: জাভাস্ক্রিপ্টের ক্লিপবোর্ডে অনুলিপি করুন !
স্টিভেনভ

298

নিম্নলিখিত ক্রোমটি ক্রোম, ফায়ারফক্স, ইন্টারনেট এক্সপ্লোরার এবং এজ এ কাজ করে এবং সাফারির সাম্প্রতিক সংস্করণগুলিতে (কপিরাইট সমর্থন 10 সংস্করণে যুক্ত হয়েছিল যা অক্টোবর 2016 প্রকাশিত হয়েছিল)।

  • একটি টেক্সারিয়া তৈরি করুন এবং ক্লিপবোর্ডে অনুলিপি করতে চান এমন সামগ্রীতে এর সামগ্রীগুলি সেট করুন।
  • পাঠ্যকে ডিওমে যুক্ত করুন end
  • পাঠ্য পাঠ্য পাঠ্য নির্বাচন করুন।
  • ডকুমেন্ট.এক্সেকমন্ড ("অনুলিপি") কল করুন
  • ডোম থেকে টেক্সারিয়া সরান।

দ্রষ্টব্য: আপনি টেক্সারিয়াটি দেখতে পাবেন না, কারণ এটি জাভাস্ক্রিপ্ট কোডের একই সংক্রামক অনুরোধের মধ্যে যুক্ত এবং সরানো হয়েছে।

আপনি যদি এটি নিজে প্রয়োগ করে থাকেন তবে কিছু বিষয় লক্ষ্য রাখবেন:

  • সুরক্ষার কারণে, কেবল ইভেন্টের হ্যান্ডলার থেকে যেমন কল ক্লিক করা যায় (ঠিক তেমন উইন্ডো খোলার সাথে) this
  • ক্লিপবোর্ডটি প্রথমবার আপডেট হওয়ার পরে ইন্টারনেট এক্সপ্লোরার একটি অনুমতি ডায়ালগ প্রদর্শন করবে।
  • ইন্টারনেটের এক্সপ্লোরার এবং এজ যখন টেক্সারিয়া ফোকাস করবে তখন স্ক্রোল করবে।
  • execCommand () কিছু ক্ষেত্রে ফেলে দিতে পারে।
  • আপনি যদি টেক্সারিয়া না ব্যবহার করেন তবে নিউলাইনস এবং ট্যাবগুলি গ্রাস করা যাবে। (বেশিরভাগ নিবন্ধগুলি একটি ডিভ ব্যবহারের প্রস্তাব বলে মনে হচ্ছে)
  • ইন্টারনেট এক্সপ্লোরার ডায়ালগটি দেখানোর সময় টেক্সারিয়াটি দৃশ্যমান হবে, আপনাকে এটি লুকিয়ে রাখতে হবে, অথবা ইন্টারনেট এক্সপ্লোরার নির্দিষ্ট ক্লিপবোর্ড ডেটা এপিআই ব্যবহার করতে হবে।
  • ইন্টারনেট এক্সপ্লোরারে সিস্টেম প্রশাসকরা ক্লিপবোর্ড এপিআই অক্ষম করতে পারেন।

নীচের ফাংশনটি নীচের সমস্ত বিষয় যথাসম্ভব পরিষ্কারভাবে পরিচালনা করতে হবে। আপনি যদি কোনও সমস্যা পান বা এটির উন্নতির জন্য কোনও পরামর্শ পান তবে একটি মন্তব্য করুন।

// Copies a string to the clipboard. Must be called from within an
// event handler such as click. May return false if it failed, but
// this is not always possible. Browser support for Chrome 43+,
// Firefox 42+, Safari 10+, Edge and Internet Explorer 10+.
// Internet Explorer: The clipboard feature may be disabled by
// an administrator. By default a prompt is shown the first
// time the clipboard is used (per session).
function copyToClipboard(text) {
    if (window.clipboardData && window.clipboardData.setData) {
        // Internet Explorer-specific code path to prevent textarea being shown while dialog is visible.
        return clipboardData.setData("Text", text);

    }
    else if (document.queryCommandSupported && document.queryCommandSupported("copy")) {
        var textarea = document.createElement("textarea");
        textarea.textContent = text;
        textarea.style.position = "fixed";  // Prevent scrolling to bottom of page in Microsoft Edge.
        document.body.appendChild(textarea);
        textarea.select();
        try {
            return document.execCommand("copy");  // Security exception may be thrown by some browsers.
        }
        catch (ex) {
            console.warn("Copy to clipboard failed.", ex);
            return false;
        }
        finally {
            document.body.removeChild(textarea);
        }
    }
}

https://jsfiddle.net/fx6a6n6x/


9
উত্তম উত্তর: ক্রস ব্রাউজার সমর্থন, ত্রুটি পরিচালনা + পরিষ্কার করা। কোয়েরি কম্যান্ডসম্পোর্টে আজকের নতুন সমর্থন হিসাবে, ক্লিপবোর্ডে অনুলিপি করা এখন জাভাস্ক্রিপ্টে সম্ভব এবং এটি উইন্ডোয়ার্ড উইন্ডো.প্রম্পট ("ক্লিপবোর্ডে অনুলিপি: Ctrl + সি, প্রবেশ করুন", পাঠ্য) 'ওয়ার্কআউন্ডের পরিবর্তে স্বীকৃত উত্তর হওয়া উচিত। উইন্ডো.ক্লিপবোর্ডডেটা আইই 9 তে সমর্থিত, তাই আপনার ব্রাউজার সমর্থন তালিকায় আই 99 যুক্ত করা উচিত এবং আমি মনে করি সম্ভবত আই 8 এবং পূর্ববর্তীটিও রয়েছে, তবে যাচাই করা দরকার।
ব্যবহারকারী 627283

হ্যাঁ। IE 8/9 ঠিক আছে। আমাদের অ্যাপ্লিকেশন তাদের সমর্থন করে না। সুতরাং আমি পরীক্ষা করিনি। আইই জানুয়ারীতে সমর্থন বন্ধ করে দেয়, তাই আমি খুব বেশি দৌড়ে যাই না। আশা করি সাফারি সমর্থন শিগগিরই অবতরণ করবে। আমি নিশ্চিত যে এটি তাদের রাডারে রয়েছে।
গ্রেগ লো

4
@ সান্তিয়াগো কর্রেডোইরা: ২০১ 2016 সালে, এটি গৃহীত উত্তর হওয়ার যোগ্য। দয়া করে বিজিটি (বড় সবুজ টিক) পুনরায় নিয়োগের বিষয়টি বিবেচনা করুন।
লরেন্স ডল

3
@ নোটিডার্ট আমি পরীক্ষিত এবং এটি ফায়ারফক্স 54, ক্রোম 60 এবং প্রান্ত ব্রাউজারের জন্য পুরোপুরি কাজ করে, এমনকি যখন এইচটিএমএল ডকুমেন্টে ফোকাস না থাকে, তখন আপনার ত্রুটিটি সম্ভবত এফএফ 55 সংস্করণে নির্দিষ্ট
টসিন জন

2
@ নাইটিডার্ট এটি এখনও পুরোপুরি এখানে কাজ করে, দেব সরঞ্জামগুলিতে ফোকাস করা এটি থামেনি। এবং
তোসিন জন

97

এই যে আমার গ্রহণ এখানে ...

function copy(text) {
    var input = document.createElement('input');
    input.setAttribute('value', text);
    document.body.appendChild(input);
    input.select();
    var result = document.execCommand('copy');
    document.body.removeChild(input);
    return result;
 }

@ কোরেইম: নোট করুন যে এইচটিএমএল inputফিল্ড ব্যবহার করা লাইন ব্রেকগুলিকে সম্মান করবে না \nএবং কোনও পাঠ্যকে একক লাইনে সমতল করবে।

মন্তব্যগুলিতে @ নিক্সসান দ্বারা উল্লিখিত হিসাবে, ব্যবহারটি textareaসমস্যাটি নীচের মত সংশোধন করবে:

function copy(text) {
    var input = document.createElement('textarea');
    input.innerHTML = text;
    document.body.appendChild(input);
    input.select();
    var result = document.execCommand('copy');
    document.body.removeChild(input);
    return result;
}

@ নিক্সসান কিভাবে স্ট্রিং কপি করবেন \n?
sof-03

2
@ সফট -03 ইনপুট পরিবর্তে \r\n
টেক্সেরিয়া

1
মাইক্রোসফ্ট এজ 42107134.1.0 এ Win10x64 এ কাজ করছেন না
হোনসা স্টুন্না

3
আমি আপনার উত্তর অনুলিপি করেছি। এটি ক্রোমে কাজ করে এবং এটাই আমার প্রয়োজন।
ব্যবহারকারী 875234

এটি ফায়ারফক্স v68.0.2 (64-বিট) এর সাথে কাজ করে এমন সহজ সমাধান।
আর্য

88

যদি আপনি সত্যিই একটি সহজ সমাধান চান (একীভূত হতে 5 মিনিটেরও কম সময় নেয়) এবং বাক্সের ঠিক বাইরে দেখতে ভাল লাগে তবে ক্লিপ্পি আরও জটিল কয়েকটি সমাধানের একটি দুর্দান্ত বিকল্প।

এটি লিখেছিলেন গিটহাবের সহ-প্রতিষ্ঠাতা। নীচে ফ্ল্যাশ এম্বেড কোড উদাহরণ:

<object
   classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
   width="110"
   height="14"
   id="clippy">
  <param name="movie" value="/flash/clippy.swf"/>
  <param name="allowScriptAccess" value="always"/>
  <param name="quality" value="high"/>
  <param name="scale" value="noscale"/>
  <param NAME="FlashVars" value="text=#{text}"/>
  <param name="bgcolor" value="#{bgcolor}"/>
  <embed
     src="/flash/clippy.swf"
     width="110"
     height="14"
     name="clippy"
     quality="high"
     allowScriptAccess="always"
     type="application/x-shockwave-flash"
     pluginspage="http://www.macromedia.com/go/getflashplayer"
     FlashVars="text=#{text}"
     bgcolor="#{bgcolor}"/>
</object>

#{text}আপনার অনুলিপি করা পাঠ্যটি এবং #{bgcolor}একটি রঙ দিয়ে প্রতিস্থাপন করতে ভুলবেন না ।


12
আগ্রহী প্রত্যেকের জন্য, রেপোর জন্য ইউআরএল অনুলিপি করার সময় ক্লিপিকে গিটহাবটিতে ব্যবহার করা হচ্ছে তা পরীক্ষা করুন।
রাদেক

66
এফওয়াইআই, গিটিহাবের উপর ক্লিপির ব্যবহার জিরো ক্লিপবোর্ড দ্বারা প্রতিস্থাপিত হয়েছে।
জেমস এম গ্রিন

218
ওপি জাভাস্ক্রিপ্টে একটি সমাধান চেয়েছিল। ফ্ল্যাশ নয়
এমটি

21
@ এমটি, "জাভাস্ক্রিপ্ট" দ্বারা কিছু লোকের অর্থ "ব্রাউজার ক্লায়েন্টে", সুতরাং জেএস-কেবল প্রয়োজন হতে পারে, এই উত্তরটির সুযোগ পাওয়া অনেক লোক সত্যই জেএস-বা-অন্যান্য-বহুল-সমর্থিত- সন্ধান করছেন - ক্লায়েন্ট-টেক। ফ্ল্যাশ সমস্ত প্ল্যাটফর্মগুলিতে আঘাত করে না, তবে ক্লিপবোর্ড সমর্থনের মতো পোলিশ বৈশিষ্ট্যের জন্য, এটি কোনও পপআপ ডায়ালগের (যদি এটি অবশ্যই করে) ইউএক্সকে উন্নত করে তবে তা যুক্ত করা উপযুক্ত worth
ডেভ ডপসন

13
এখন ফ্ল্যাশের উপর নির্ভর করার অর্থ এমন কিছু সাইট দর্শকদের পক্ষে কাজ না করা যা ওয়েব ডেভলপমেন্ট করা প্রায় সকলের কাছেই গ্রহণযোগ্য নয়।
জিঙ্গলেস্টুলা

86

ওয়েবপৃষ্ঠা থেকে ক্লিপবোর্ডটি পড়া এবং সংশোধন করা সুরক্ষা এবং গোপনীয়তার উদ্বেগ উত্থাপন করে। তবে ইন্টারনেট এক্সপ্লোরারে এটি করা সম্ভব। আমি এই উদাহরণটি স্নিপেট পেয়েছি :

    <script type="text/javascript">
        function select_all(obj) {
            var text_val=eval(obj);
            text_val.focus();
            text_val.select();
            r = text_val.createTextRange();
            if (!r.execCommand) return; // feature detection
            r.execCommand('copy');
        }
    </script>
    <input value="http://www.sajithmr.com"
     onclick="select_all(this)" name="url" type="text" />


7
একটি সাধারণ অনুলিপি অপারেশনের জন্য ফ্ল্যাশ ব্যবহার করা ওভারকিলের মতো মনে হয়, খুশি হ'ল এটি করার একটি পরিষ্কার জেএস উপায় ছিল। এবং যেহেতু আমরা কর্পোরেট কর্পোরেশনে রয়েছি। আইই ঠিক আছে। ধন্যবাদ বান্দি!
এডি

5
প্লিজ ব্যাখ্যা করে কী execCommand(\\’copy\\’);করে, যদি আইই এর ক্লিপবোর্ডে অনুলিপি না থাকে? @ মিঃবর্না
রোজা

20
ব্যবহার করবেন না if(!document.all)কিন্তু if(!r.execCommand)পাছে অন্য কেহ কার্যকরী এটা! ডকুমেন্ট.এল একেবারেই এটি সম্পর্কিত নয়।
এম93 এ

1
ম্যান, আমি সাধারণ এবং পরিষ্কার কোড সম্পর্কে এটি পছন্দ করি, এটি ছোটখাটো রক্ষণাবেক্ষণ করে প্রায় চিরকালের জন্য কাজ করে। এটি আমার জন্য এটি করেছে, এটি সুন্দরভাবে কাজ করে।
স্যামুয়েল রমজান 21

1
সর্বশেষ ক্রোম, ফায়ারফক্স, বা এমএস এজে কাজ করে না :(
জোনাথন মারজুলো

69

আমি এই সমস্যা সম্পর্কে সম্প্রতি একটি প্রযুক্তিগত ব্লগ পোস্ট লিখেছি (আমি লুসিডচার্টে কাজ করি এবং আমরা সম্প্রতি আমাদের ক্লিপবোর্ডে একটি পরীক্ষা করেছি)।

ক্লিপবোর্ডে সরল পাঠ্য অনুলিপি করা অপেক্ষাকৃত সহজ, ধরে নিই যে আপনি এটি কোনও সিস্টেম অনুলিপি ইভেন্টের ( CtrlCব্রাউজারের মেনুতে ব্যবহারকারী চাপায় বা ব্যবহার করেন) এটি করতে চান।

var isIe = (navigator.userAgent.toLowerCase().indexOf("msie") != -1 
           || navigator.userAgent.toLowerCase().indexOf("trident") != -1);

document.addEventListener('copy', function(e) {
    var textToPutOnClipboard = "This is some text";
    if (isIe) {
        window.clipboardData.setData('Text', textToPutOnClipboard);    
    } else {
        e.clipboardData.setData('text/plain', textToPutOnClipboard);
    }
    e.preventDefault();
});

সিস্টেম অনুলিপি ইভেন্টের সময় না হয়ে ক্লিপবোর্ডে পাঠ্য লেখা রাখা আরও বেশি কঠিন। দেখে মনে হচ্ছে এটি ফ্ল্যাশের মাধ্যমে এটি করার কয়েকটি অন্যান্য উত্তরগুলির রেফারেন্স পদ্ধতিগুলি যা এটি করার একমাত্র ক্রস-ব্রাউজার উপায় (যতদূর আমি বুঝতে পেরেছি)।

এটি বাদে ব্রাউজার-ব্রাউজারের ভিত্তিতে কিছু বিকল্প রয়েছে।

এটি আইই এর মধ্যে সবচেয়ে সাধারণ, যেখানে আপনি জাভাস্ক্রিপ্ট থেকে যে কোনও সময় ক্লিপবোর্ড ডেটা অবজেক্টটি অ্যাক্সেস করতে পারবেন:

window.clipboardData

(আপনি যখন কোনও সিস্টেম কাট, অনুলিপি বা পেষ্ট ইভেন্টের বাইরে এটি করার চেষ্টা করছেন তবে আইই ব্যবহারকারীকে ওয়েব অ্যাপ্লিকেশন ক্লিপবোর্ডের অনুমতি দেওয়ার জন্য অনুরোধ জানাবে))

ক্রোমে আপনি একটি ক্রোম এক্সটেনশন তৈরি করতে পারেন যা আপনাকে ক্লিপবোর্ডের অনুমতি দেবে (আমরা লুসিডচার্টের জন্য এটি করি)। তারপরে আপনার এক্সটেনশান ইনস্টল করা ব্যবহারকারীদের জন্য আপনাকে কেবল সিস্টেম ইভেন্টটি নিজেই চালিত করতে হবে:

document.execCommand('copy');

দেখে মনে হচ্ছে ফায়ারফক্সের কিছু বিকল্প রয়েছে যা ব্যবহারকারীরা নির্দিষ্ট সাইটগুলিকে ক্লিপবোর্ড অ্যাক্সেসের অনুমতি দিতে অনুমতি দেয়, তবে আমি ব্যক্তিগতভাবে এগুলির কোনও চেষ্টা করি নি।


2
ব্লগ পোস্টে উল্লেখ করা হয়নি (আমি অদূর ভবিষ্যতে এটি আপডেট করার আশা করছি), এক্সিকিউমন্ড ব্যবহার করে কাটা এবং অনুলিপি তৈরি করার ক্ষমতা। এটি IE10 +, ক্রোম 43+ এবং অপেরা 29 + এ সমর্থিত। এটি সম্পর্কে এখানে পড়ুন। updates.html5rocks.com/2015/04/cut-and-copy-commands
রিচার্ড Shurtz

এটির সাথে একটি সমস্যা হ'ল এটি অন্যান্য সাধারণ অনুলিপি ইভেন্টগুলিকে হাইজ্যাক করে।
ব্রক অ্যাডামস

বিশেষ দ্রষ্টব্য! এই ব্রাউজার স্নিফিং বিএডি। বৈশিষ্ট্য স্নিগ্ধ করুন। আইই আপডেট করার জন্য আপনি এটি কঠিন করে তুলছেন।
ওডিনহো - ভেলমন্ট

51

ক্লিপবোর্ড.জেএস হ'ল একটি ছোট, ফ্ল্যাশহীন, ইউটিলিটি যা ক্লিপবোর্ডে পাঠ্য বা এইচটিএমএল ডেটা অনুলিপি করার অনুমতি দেয়। এটি ব্যবহার করা খুব সহজ, কেবল .js অন্তর্ভুক্ত করুন এবং এর মতো কিছু ব্যবহার করুন:

<button id='markup-copy'>Copy Button</button>

<script>
document.getElementById('markup-copy').addEventListener('click', function() {
  clipboard.copy({
    'text/plain': 'Markup text. Paste me into a rich text editor.',
    'text/html': '<i>here</i> is some <b>rich text</b>'
  }).then(
    function(){console.log('success'); },
    function(err){console.log('failure', err);
  });

});
</script>

clipboard.js নেভিগেশন হয় GitHub

দ্রষ্টব্য: এটি এখন অবচয় করা হয়েছে। এখানে স্থানান্তর করুন


এই লাইব্রেরিটি হিরো এর ট্যুরের জন্য এবং কৌতুকময় মোডে ফলেরব্যাক ব্রাউজারের জন্য কৌণিক.ওআই দ্বারা ব্যবহার করা হয়েছে যা ব্যবহারকারী কেবল অনুলিপি করতে চান এমন একটি পূর্বনির্ধারিত পাঠ্য প্রদর্শন করে এক্সিকিউমন্ডকে সমর্থন করে না।
জন-ফিলিপ

1
সৌন্দর্য পারেন clipboard.js প্রতিস্থাপিত হয়েছে, বা forked, কিন্তু এটা বেঁচে থাকার জন্য বলে মনে হয় এবং সক্রিয়ভাবে এ পরিচালিত হয় npmjs.com/package/clipboard
জোয়াও

35

জিরো ক্লিপবোর্ডটি আমি খুঁজে পেয়েছি সেরা ক্রস ব্রাউজার সমাধান:

<div id="copy" data-clipboard-text="Copy Me!">Click to copy</div>    
<script src="ZeroClipboard.js"></script>
<script>
  var clip = new ZeroClipboard( document.getElementById('copy') );
</script>

আইওএসের জন্য যদি আপনার নন-ফ্ল্যাশ সমর্থন দরকার হয় তবে আপনি কেবল একটি ফ্যাল-ব্যাক যুক্ত করুন:

clip.on( 'noflash', function ( client, args ) {
    $("#copy").click(function(){            
        var txt = $(this).attr('data-clipboard-text');
        prompt ("Copy link, then click OK.", txt);
    });
});  

http://zeroclipboard.org/

https://github.com/zeroclipboard/ZeroClipboard


25
ফ্ল্যাশ সহ ক্রস ব্রাউজার? আইওএস এবং অ্যান্ড্রয়েড 4.4 এ কাজ করছে না
র‌্যাটার

1
আপডেট উত্তর দেখুন। এটি ফ্ল্যাশ-ব্যবহারকারীদের জন্য কম পদক্ষেপ এবং প্রত্যেকের জন্য একটি পতনের পিছনে মঞ্জুরি দেয়।
জাস্টিন

8
কোডটির এক বিলিয়ন লাইন রয়েছে। এটি একেবারে উপহাস। কোনও প্রকল্পে এই জাতীয় দানবকে অন্তর্ভুক্ত করার চেয়ে কিছু না করা ভাল
vsync

2
এখানে একটি সাধারণ সংস্করণ রয়েছে gist.github.com/JamesMGreene/8698897 যা 20K যা k৪k সংস্করণে সমস্ত ঘণ্টা এবং হুইসেল নেই। দুটিও খুব বড় নয়। আমার অনুমান যে বেশিরভাগ ব্যবহারকারীর অতিরিক্ত মিলিসেকেন্ডের সাথে ঠিক আছে যে কোনও 74k বা 20k ফাইল ডাউনলোড করা হবে তাই অনুলিপি / পেস্ট দুইটির পরিবর্তে এক ক্লিক হয় click
জাস্টিন

@ জাস্টিন আমি স্থানীয়ভাবে এটি কাজ করতে পারি না, যদিও আমি উদাহরণগুলি অনুলিপি করে আটকান (আমি নূন্যতম পরিবর্তনগুলি করি, যেমন srcস্ক্রিপ্ট ট্যাগগুলির মান )। আমি মনে করি যে তাদের ডকুমেন্টেশনগুলি বেশ সুন্দর তবে অদক্ষ।
গুই ইমামুরা

29

2018 এ, আপনি এটি সম্পর্কে কীভাবে যেতে পারেন তা এখানে:

async copySomething(text?) {
  try {
    const toCopy = text || location.href;
    await navigator.clipboard.writeText(toCopy);
    console.log('Text or Page URL copied');
  }
  catch (err) {
    console.error('Failed to copy: ', err);
  }
}

এটি আমার কৌণিক 6+ কোডে এর মতো ব্যবহৃত হয়:

<button mat-menu-item (click)="copySomething()">
    <span>Copy link</span>
</button>

আমি যদি একটি স্ট্রিংয়ে পাস করি তবে এটি এটি অনুলিপি করে। যদি কিছু না হয় তবে এটি পৃষ্ঠার ইউআরএল অনুলিপি করে।

ক্লিপবোর্ড স্টাফগুলিতে আরও জিমন্যাস্টিকগুলিও সম্পন্ন করা যায়। আরও তথ্য এখানে দেখুন:

ক্লিপবোর্ড অ্যাক্সেস অবরোধ মুক্ত করা


আপনি লোকালহোস্টের সাথে সংযুক্ত হয়েছেন
জো ওয়ার্নার

2
দয়া করে সচেতন হন যে এটি
সাফারিটিতে

1
@ অর্জুন27 আশা করি কোনও একদিন অ্যাপল ধরা পড়বে। যদিও এই caniuse.com/#feat=clipboard উপরোক্ত সংস্করণটি দেখায় যা আপনি আংশিকভাবে সমর্থিত বলে উল্লেখ করেছেন।
খোফি

2
আমি উভয় ফাংশন রিড টেক্সট, লেখার জন্য পাঠিয়েছি প্রত্যাখ্যাত অবস্থায় একটি প্রতিশ্রুতি
রমিন

3
সরবরাহিত লিঙ্ক অনুসারে, "নেভিগেটর.ক্লিপবোর্ড কেবলমাত্র এইচটিটিপিএস-এ দেওয়া পৃষ্ঠাগুলির জন্য সমর্থিত"
টিএমএইচ - কোডিড্যাক্ট

26

আমি যে প্রকল্পগুলিতে কাজ করছি তার একটি থেকে, জিকোয়ারি কপি-টু-ক্লিপবোর্ড প্লাগইন যা জিরো ক্লিপবোর্ড ব্যবহার করে লাইব্রেরিটি ।

আপনি যদি ভারী jQuery ব্যবহারকারী হন তবে স্থানীয় জিরো ক্লিপবোর্ড প্লাগইনটির চেয়ে এটি ব্যবহার করা সহজ।


6
92 কেবি আসলে এত বড় নয়, এটি দ্রুত কাজ করে এবং আপনি যদি পছন্দ করেন তবে text()পরিবর্তে ব্যবহার innerHTML()করতে পারেন ..
রোজা

17
@ জন: innerHTMLদীর্ঘকাল ধরে ক্রস ব্রাউজারকে সমর্থন করা হয়েছে। মাইক্রোসফ্ট মূলত ধারণাটি নিয়ে এসেছিল কারণ এটি এটিকে অবিশ্বাস্য বা মালিকানাধীন করে না। এটি এখন অবশেষে অফিসিয়াল স্পেসে যুক্ত হচ্ছে (প্রতিটি বড় ব্রাউজার বিক্রেতা ইতিমধ্যে এর জন্য সমর্থন যোগ করেছে ... দীর্ঘশ্বাস ফেলে )।
জেমস এম গ্রিন

19
@ জন আপনি jQuery জাভাস্ক্রিপ্ট যথেষ্ট উত্তর নেই যা ফ্ল্যাশ ব্যবহার করে এমন উত্তরের বিষয়ে অভিযোগ করেছেন;)
ম্যাক্স ন্যানসি

4
অভ্যন্তরীণ এইচটিএমএল বেশিরভাগ ক্ষেত্রে বিকল্পগুলির চেয়ে ভাল। আপনার উচ্চ ঘোড়া বন্ধ পান! এটি দ্রুত, আরও কার্যকর এবং একটি পৃষ্ঠা পুনরায় রেন্ডার প্রয়োজন হয় না।
ইডেন

4
@ রোজা 92KBসত্যিই বড়। LTE পরিপক্ক হওয়া অবধি জিপিআরএস হ'ল ডাব্লুডাব্লু মোবাইল ডেটা মান , এবং এটি শুরু হয় 1 KB/s। নিজেই গণিত করুন।
টিনো

23

যেহেতু Chrome 42+ এবং ফায়ারফক্স 41+ এখন ডকুমেন্ট.এক্সকম্যান্ড ('অনুলিপি') কমান্ড সমর্থন করে । তাই আমি টিম ডাউনের পুরানো উত্তর এবং গুগল বিকাশকারীর উত্তরের সংমিশ্রণটি দিয়ে ক্রস ব্রাউজারের কপি-টু-ক্লিপবোর্ড সক্ষমতার জন্য কয়েকটি ফাংশন তৈরি করেছি :

function selectElementContents(el) {
    // Copy textarea, pre, div, etc.
    if (document.body.createTextRange) {
        // IE
        var textRange = document.body.createTextRange();
        textRange.moveToElementText(el);
        textRange.select();
        textRange.execCommand("Copy");
    } 
    else if (window.getSelection && document.createRange) {
        // Non-Internet Explorer
        var range = document.createRange();
        range.selectNodeContents(el);
        var sel = window.getSelection();
        sel.removeAllRanges();
        sel.addRange(range);
        try {
            var successful = document.execCommand('copy');
            var msg = successful ? 'successful' : 'unsuccessful';
            console.log('Copy command was ' + msg);
        }
        catch (err) {
            console.log('Oops, unable to copy');
        }
    }
} // end function selectElementContents(el)

function make_copy_button(el) {
    var copy_btn = document.createElement('input');
    copy_btn.type = "button";
    el.parentNode.insertBefore(copy_btn, el.nextSibling);
    copy_btn.onclick = function() {
        selectElementContents(el);
    };

    if (document.queryCommandSupported("copy") || parseInt(navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./)[2]) >= 42) {
        // Copy works with Internet Explorer 4+, Chrome 42+, Firefox 41+, Opera 29+
        copy_btn.value = "Copy to Clipboard";
    }
    else {
        // Select only for Safari and older Chrome, Firefox and Opera
        copy_btn.value = "Select All (then press Ctrl + C to Copy)";
    }
}
/* Note: document.queryCommandSupported("copy") should return "true" on browsers that support copy
    but there was a bug in Chrome versions 42 to 47 that makes it return "false".  So in those
    versions of Chrome feature detection does not work!
    See https://code.google.com/p/chromium/issues/detail?id=476508
*/

make_copy_button(document.getElementById("markup"));
<pre id="markup">
  Text that can be copied or selected with cross browser support.
</pre>


এই সংক্ষিপ্তসার জন্য ধন্যবাদ! আপনার কোডে আপনার কিছুটা ভুল রয়েছে: আপনি "রেঞ্জ" ভেরিয়েবলকে দু'বার (var পরিসর = ডকুমেন্ট.ক্রেটরেঞ্জ ()) সংজ্ঞায়িত করেছেন।
খ্রিস্টান এঙ্গেল

1
আপনি সঠিক @ ক্রিশ্চিয়ান এঞ্জেল। আমি দ্বিতীয়টি সরিয়ে ফেলেছি। আমি জানি না কিভাবে এটি সেখানে in
জেফ বেকার

23

আমি এটি খুব সফলভাবে ব্যবহার করেছি ( jQuery বা অন্য কোনও কাঠামো ছাড়াই )।

function copyToClp(txt){
    txt = document.createTextNode(txt);
    var m = document;
    var w = window;
    var b = m.body;
    b.appendChild(txt);
    if (b.createTextRange) {
        var d = b.createTextRange();
        d.moveToElementText(txt);
        d.select();
        m.execCommand('copy');
    } 
    else {
        var d = m.createRange();
        var g = w.getSelection;
        d.selectNodeContents(txt);
        g().removeAllRanges();
        g().addRange(d);
        m.execCommand('copy');
        g().removeAllRanges();
    }
    txt.remove();
}

সতর্কতা

ট্যাবগুলি স্পেসে রূপান্তরিত হয় (কমপক্ষে ক্রোমে)।


এই পদ্ধতির মধ্যে স্পেসগুলি অনুপস্থিত
বিক্রম

1
ক্রোম। ট্যাবগুলি এক জায়গায় রূপান্তরিত হয়
বিক্রম

22

আমি নিম্নলিখিত সমাধানটি পেয়েছি:

কী ডাউন হ্যান্ডলার "প্রাক" ট্যাগ তৈরি করে। আমরা এই ট্যাগটিতে অনুলিপি করার জন্য সামগ্রীটি সেট করেছি, তারপরে এই ট্যাগটিতে একটি নির্বাচন করুন এবং হ্যান্ডলারে সত্য ফিরে আসি। এটি ক্রোমের স্ট্যান্ডার্ড হ্যান্ডলারকে কল করে এবং নির্বাচিত পাঠ্যের অনুলিপি করে।

এবং আপনার যদি প্রয়োজন হয় তবে আপনাকে পূর্ববর্তী নির্বাচনটি পুনরুদ্ধার করার জন্য ফাংশনের সময়সীমা নির্ধারণ করা যেতে পারে। মটুলগুলিতে আমার বাস্তবায়ন:

   function EnybyClipboard() {
     this.saveSelection = false;
     this.callback = false;
     this.pastedText = false;

     this.restoreSelection = function() {
       if (this.saveSelection) {
         window.getSelection().removeAllRanges();
         for (var i = 0; i < this.saveSelection.length; i++) {
           window.getSelection().addRange(this.saveSelection[i]);
         }
         this.saveSelection = false;
       }
     };

     this.copyText = function(text) {
       var div = $('special_copy');
       if (!div) {
         div = new Element('pre', {
           'id': 'special_copy',
           'style': 'opacity: 0;position: absolute;top: -10000px;right: 0;'
         });
         div.injectInside(document.body);
       }
       div.set('text', text);
       if (document.createRange) {
         var rng = document.createRange();
         rng.selectNodeContents(div);
         this.saveSelection = [];
         var selection = window.getSelection();
         for (var i = 0; i < selection.rangeCount; i++) {
           this.saveSelection[i] = selection.getRangeAt(i);
         }
         window.getSelection().removeAllRanges();
         window.getSelection().addRange(rng);
         setTimeout(this.restoreSelection.bind(this), 100);
       } else return alert('Copy not work. :(');
     };

     this.getPastedText = function() {
       if (!this.pastedText) alert('Nothing to paste. :(');
       return this.pastedText;
     };

     this.pasteText = function(callback) {
       var div = $('special_paste');
       if (!div) {
         div = new Element('textarea', {
           'id': 'special_paste',
           'style': 'opacity: 0;position: absolute;top: -10000px;right: 0;'
         });
         div.injectInside(document.body);
         div.addEvent('keyup', function() {
           if (this.callback) {
             this.pastedText = $('special_paste').get('value');
             this.callback.call(null, this.pastedText);
             this.callback = false;
             this.pastedText = false;
             setTimeout(this.restoreSelection.bind(this), 100);
           }
         }.bind(this));
       }
       div.set('value', '');
       if (document.createRange) {
         var rng = document.createRange();
         rng.selectNodeContents(div);
         this.saveSelection = [];
         var selection = window.getSelection();
         for (var i = 0; i < selection.rangeCount; i++) {
           this.saveSelection[i] = selection.getRangeAt(i);
         }
         window.getSelection().removeAllRanges();
         window.getSelection().addRange(rng);
         div.focus();
         this.callback = callback;
       } else return alert('Fail to paste. :(');
     };
   }

ব্যবহার:

enyby_clip = new EnybyClipboard(); //init 

enyby_clip.copyText('some_text'); // place this in CTRL+C handler and return true;

enyby_clip.pasteText(function callback(pasted_text) {
        alert(pasted_text);
}); // place this in CTRL+V handler and return true;

পেস্ট এ এটি টেক্সারিয়া তৈরি করে এবং একইভাবে কাজ করে।

পিএস হতে পারে এই সমাধানটি ফ্ল্যাশ ছাড়াই সম্পূর্ণ ক্রস ব্রাউজার সমাধান তৈরি করতে ব্যবহার করা যেতে পারে। এটি এফএফ এবং ক্রোমে কাজ করে।


2
কেউ কি এটা চেষ্টা করে? নিফটি জিনিসের মতো শোনাচ্ছে, যদি সত্যিই এটি ব্রাউজারের একটি পরিসরে কাজ করে!
মাইকেল

1
jsfiddle.net/H2FHC ডেমো: fiddle.jshell.net/H2FHC/ শো দয়া করে এটি খুলুন এবং Ctrl + V বা Ctrl + C টিপুন। এফএফ 19.0 পুরোপুরি কাঁটাচামচ। ক্রোমে 25.0.1364.97 মি। অপেরা 12.14 - ঠিক আছে। উইন্ডোজের জন্য সাফারি 5.1.7 - ঠিক আছে। আইই - ব্যর্থ
এনাইবি

IE এর জন্য পৃষ্ঠার অভ্যন্তর উপাদানটিতে রান ফোকাস প্রয়োজন। IE 9-10- এ কর্মরত fiddle.jshell.net/H2FHC/3/ শো এবং fiddle.jshell.net/H2FHC/3 দেখুন । IE 6/7 এর প্রক্রিয়াটি অন্যভাবে তৈরি করতে হবে কারণ ডকুমেন্ট.ক্রেটরেঞ্জ সমর্থিত নয়।
এনাইবি

21

অন্যান্য পদ্ধতিগুলি ক্লিপবোর্ডে সরল পাঠ্যটি অনুলিপি করবে। এইচটিএমএল অনুলিপি করতে (উদাহরণস্বরূপ, আপনি ফলাফলকে ডাব্লুএসআইডাব্লুওয়াইজি সম্পাদক হিসাবে পেস্ট করতে পারেন), আপনি কেবলমাত্র IE এ নিম্নলিখিতটি করতে পারেন । এটি অন্যান্য পদ্ধতির থেকে মৌলিকভাবে আলাদা, কারণ ব্রাউজারটি দৃশ্যমানভাবে সামগ্রীটি নির্বাচন করে।

// create an editable DIV and append the HTML content you want copied
var editableDiv = document.createElement("div");
with (editableDiv) {
    contentEditable = true;
}     
editableDiv.appendChild(someContentElement);          

// select the editable content and copy it to the clipboard
var r = document.body.createTextRange();
r.moveToElementText(editableDiv);
r.select();  
r.execCommand("Copy");

// deselect, so the browser doesn't leave the element visibly selected
r.moveToElementText(someHiddenDiv);
r.select();   

আরও দেখুন সম্পূর্ণ এইচটিএমএল সমাধান এখানে stackoverflow.com/questions/34191780/...
kofifus

21

আমার মনে হয় যা সবচেয়ে ভাল তা আমি একসাথে রেখেছি।

  • ইন্টারনেট এক্সপ্লোরারের ব্যতিক্রমগুলি এড়াতে সরাসরি স্টাইলের বিপরীতে সিএসএসেক্সট ব্যবহার করে।
  • যদি একটি থাকে তবে নির্বাচন পুনরুদ্ধার করে
  • পঠনযোগ্য সেট করে যাতে মোবাইল ডিভাইসে কীবোর্ডটি আসে না
  • আইওএসের কার্যকারিতা রয়েছে যাতে এটি কার্যত কার্যকর করে যেমন এক্সিকিউমন্ডকে অবরুদ্ধ করে।

এটা এখানে:

const copyToClipboard = (function initClipboardText() {
  const textarea = document.createElement('textarea');

  // Move it off screen.
  textarea.style.cssText = 'position: absolute; left: -99999em';

  // Set to readonly to prevent mobile devices opening a keyboard when
  // text is .select()'ed.
  textarea.setAttribute('readonly', true);

  document.body.appendChild(textarea);

  return function setClipboardText(text) {
    textarea.value = text;

    // Check if there is any content selected previously.
    const selected = document.getSelection().rangeCount > 0 ?
      document.getSelection().getRangeAt(0) : false;

    // iOS Safari blocks programmtic execCommand copying normally, without this hack.
    // /programming/34045777/copy-to-clipboard-using-javascript-in-ios
    if (navigator.userAgent.match(/ipad|ipod|iphone/i)) {
      const editable = textarea.contentEditable;
      textarea.contentEditable = true;
      const range = document.createRange();
      range.selectNodeContents(textarea);
      const sel = window.getSelection();
      sel.removeAllRanges();
      sel.addRange(range);
      textarea.setSelectionRange(0, 999999);
      textarea.contentEditable = editable;
    }
    else {
      textarea.select();
    }

    try {
      const result = document.execCommand('copy');

      // Restore previous selection.
      if (selected) {
        document.getSelection().removeAllRanges();
        document.getSelection().addRange(selected);
      }

      return result;
    }
    catch (err) {
      console.error(err);
      return false;
    }
  };
})();

ব্যবহার: copyToClipboard('some text')


13

ফ্ল্যাশ 10 হিসাবে, আপনি কেবল ক্লিপবোর্ডে অনুলিপি করতে পারেন যদি কোনও ফ্ল্যাশ অবজেক্টের সাথে ব্যবহারকারীর ইন্টারঅ্যাকশন থেকে ক্রিয়নের উত্স হয়। ( অ্যাডোবের ফ্ল্যাশ 10 ঘোষণা থেকে সম্পর্কিত বিভাগটি পড়ুন )

সমাধানটি হ'ল কপি বোতামের উপরে কোনও ফ্ল্যাশ অবজেক্টকে বা যে কোনও উপাদান অনুলিপি শুরু করে। জিরো ক্লিপবোর্ড বর্তমানে এই বাস্তবায়ন সহ সেরা গ্রন্থাগার। অভিজ্ঞ ফ্ল্যাশ বিকাশকারীরা কেবল তাদের নিজস্ব লাইব্রেরি তৈরি করতে চাইতে পারেন।


12

  <!DOCTYPE html>

  <style>
    #t {
      width: 1px
      height: 1px
      border: none
    }
    #t:focus {
      outline: none
    }
  </style>

  <script>
    function copy(text) {
      var t = document.getElementById('t')
      t.innerHTML = text
      t.select()
      try {
        var successful = document.execCommand('copy')
        var msg = successful ? 'successfully' : 'unsuccessfully'
        console.log('text coppied ' + msg)
      } catch (err) {
        console.log('Unable to copy text')
      }
      t.innerHTML = ''
    }
  </script>

  <textarea id=t></textarea>

  <button onclick="copy('hello world')">
    Click me
  </button>


সেরা উত্তর: ডি, আপনি এ জাতীয় কিছু দিয়ে এটি উন্নতি করতে পারেন: # টি {অবস্থান: পরম; বাম: 0; জেড-ইনডেক্স: -900; প্রস্থ: 0 পিএক্স; উচ্চতা: 0 পিএক্স; সীমানা: কিছুই নয়; } সুতরাং এটি পুরোপুরি গোপন করা যাচ্ছে! তবে সত্যিই ধন্যবাদ ভাই!
ফেডেরিকো নাভারেরেট

# টি {আকার পরিবর্তন: কোনওটি নয়}
স্মার্টমনোজ

একটি ব্যাখ্যা ক্রম হবে।
পিটার মর্টেনসেন

12

আমি নিম্নলিখিত সমাধানটি পেয়েছি:

আমার কাছে একটি লুকানো ইনপুটটিতে পাঠ্য রয়েছে। কারণ setSelectionRangeলুকানো ইনপুট কাজ করে না, আমি অস্থায়ীভাবে পাঠ্যে টাইপ পরিবর্তন, টেক্সট কপি করুন, এবং তারপর এটি আবার গোপন করেছেন। আপনি যদি কোনও উপাদান থেকে পাঠ্যটি অনুলিপি করতে চান তবে আপনি এটি ফাংশনে পাস করতে পারেন এবং লক্ষ্য বিষয়বস্তুতে এর সামগ্রী সংরক্ষণ করতে পারেন।

jQuery('#copy').on('click', function () {
    copyToClipboard();
});

function copyToClipboard() {
    var target = jQuery('#hidden_text');

    // Make it visible, so can be focused
    target.attr('type', 'text');
    target.focus();
    // Select all the text
    target[0].setSelectionRange(0, target.val().length);

    // Copy the selection
    var succeed;
    try {
        succeed = document.execCommand("copy");
    }
    catch (e) {
        succeed = false;
    }

    // Hide input again
    target.attr('type', 'hidden');

    return succeed;
}

11

এইচটিএমএল ইনপুট থেকে ক্লিপবোর্ডে পাঠ্য অনুলিপি করুন:

 function myFunction() {
   /* Get the text field */
   var copyText = document.getElementById("myInput");

   /* Select the text field */
   copyText.select();

   /* Copy the text inside the text field */
   document.execCommand("Copy");

   /* Alert the copied text */
   alert("Copied the text: " + copyText.value);
 }
 <!-- The text field -->
 <input type="text" value="Hello Friend" id="myInput">

 <!-- The button used to copy the text -->
<button onclick="myFunction()">Copy text</button>

নোট: পদ্ধতি আগের Internet Explorer 9 সমর্থিত নয় এবং।document.execCommand()

উত্স : ডাব্লু 3 স্কুলস - ক্লিপবোর্ডে পাঠ্য অনুলিপি করুন


11

ইতিমধ্যে অনেক উত্তর রয়েছে, তবে একটি (jQuery) যুক্ত করতে চান। যে কোনও ব্রাউজারে, মোবাইলগুলিও দুর্দান্ত কাজ করে (যেমন, সুরক্ষা সম্পর্কে অনুরোধ জানায়, তবে আপনি যখন এটি গ্রহণ করেন তখন ঠিক কাজ করে)।

function appCopyToClipBoard(sText)
{
    var oText = false,
        bResult = false;
    try
    {
        oText = document.createElement("textarea");
        $(oText).addClass('clipboardCopier').val(sText).insertAfter('body').focus();
        oText.select();
        document.execCommand("Copy");
        bResult = true;
    }
    catch(e) {
    }

    $(oText).remove();
    return bResult;
}

আপনার কোডে:

if (!appCopyToClipBoard('Hai there! This is copied to the clipboard.'))
{
    alert('Sorry, copy to clipboard failed.');
}

9

এটি অন্যান্য উত্তরের মধ্যে কিছুটা সংমিশ্রণ।

var copyToClipboard = function(textToCopy){
    $("body")
        .append($('<textarea name="fname" class="textToCopyInput"/>' )
        .val(textToCopy))
        .find(".textToCopyInput")
        .select();
      try {
        var successful = document.execCommand('copy');
        var msg = successful ? 'successful' : 'unsuccessful';
        alert('Text copied to clipboard!');
      } catch (err) {
          window.prompt("To copy the text to clipboard: Ctrl+C, Enter", textToCopy);
      }
     $(".textToCopyInput").remove();
}

এটি jQuery ব্যবহার করে, তবে এটি অবশ্যই হয় না। আপনি চাইলে তা পরিবর্তন করতে পারেন। আমার সবেমাত্র jQuery ছিল আমার নিষ্পত্তি। ইনপুটটি না দেখায় তা নিশ্চিত করতে আপনি কিছু সিএসএস যুক্ত করতে পারেন। উদাহরণস্বরূপ যেমন:

.textToCopyInput{opacity: 0; position: absolute;}

অথবা অবশ্যই আপনি কিছু ইনলাইন স্টাইলিংও করতে পারেন

.append($('<textarea name="fname" style="opacity: 0;  position: absolute;" class="textToCopyInput"/>' )

কোনও পরিবর্তনশীল ডেটা থেকে সরাসরি কীভাবে অনুলিপি করবেন .ie: var str = "word"; ?

পরিবর্তনশীল চিত্রটি অব্যবহৃত
ভয়েজার

ভাল ব্যবহার করার জন্য '<পাঠ্য এলাকা বর্গ = "textToCopyInput" /> </ পাঠ্য এলাকা>' ক্ষেত্রে textToCopyরয়েছে\n
ভয়েজার

8

আইআই ব্যতীত অন্য ব্রাউজারগুলিতে আপনাকে ক্লিপবোর্ডটি পরিচালনা করতে একটি ছোট ফ্ল্যাশ অবজেক্ট ব্যবহার করা দরকার, যেমন


এটি এখন পুরানো হয় ... GvS দ্বারা প্রস্তাবনা খুঁজে বার করো
Mottie

6
জিভিএসের পরামর্শটি কোনও ফ্ল্যাশ মুভি ব্যবহার করে? একই ধারণা না?
TheEmirOfGroofunkistan

8

আমার (এক্সেলের মতো কিছু) কাস্টম গ্রিড সম্পাদনা এবং এক্সেলের সাথে সামঞ্জস্যতা তৈরি করতে একই সমস্যা হয়েছিল। আমাকে একাধিক ঘর নির্বাচন করা, অনুলিপি করা এবং আটকানো সমর্থন করতে হয়েছিল।

সমাধান: একটি পাঠ্য তৈরি করুন যেখানে আপনি ব্যবহারকারীর অনুলিপি করার জন্য ডেটা সন্নিবেশ করবেন (যখন ব্যবহারকারী সেলগুলি নির্বাচন করছেন তখন আমার জন্য), এতে ফোকাস সেট করুন (উদাহরণস্বরূপ, যখন ব্যবহারকারী টিপুন Ctrl ) এবং পুরো পাঠ্যটি নির্বাচন করুন।

সুতরাং, যখন ব্যবহারকারী হিট Ctrl+C সে / সে নির্বাচিত ঘরগুলি অনুলিপি করে। কেবলমাত্র টেক্সারিয়াকে এক পিক্সেলের আকার পরিবর্তন করার পরে (আমি এটি পরীক্ষা করে দেখিনি যে এটি প্রদর্শনে কাজ করবে: কিছুই নয়)। এটি সমস্ত ব্রাউজারে দুর্দান্তভাবে কাজ করে এবং এটি ব্যবহারকারীর কাছে স্বচ্ছ।

পেস্টিং - আপনি এটির মতোই করতে পারেন (আপনার টার্গেটের চেয়ে পৃথক) - টেক্সারিয়াতে ফোকাস রাখুন এবং অনপ্যাস্ট ব্যবহার করে পেস্ট ইভেন্টগুলি ধরুন (আমার প্রকল্পে আমি সম্পাদনা করার জন্য কোষে টেক্সারিয়াস ব্যবহার করি)।

আমি উদাহরণ (বাণিজ্যিক প্রকল্প) পেস্ট করতে পারি না তবে আপনি ধারণাটি পেয়ে যান।


7

আমি ক্লিপবোর্ড.জেএস ব্যবহার করেছি।

আমরা এটি এনপিএম এ পেতে পারি:

npm install clipboard --save

এবং বোরও

bower install clipboard --save

ব্যবহার এবং উদাহরণগুলি https://zenorocha.github.io/clipboard.js/ এ রয়েছে


আমি ভীত এটি ডায়নামিক সামগ্রী সঙ্গে সামঞ্জস্যপূর্ণ ছিল না, কিন্তু এটা ;-) আমার মনে হয় এটা ভাল সমাধান আছে, এখন, 2008. পুরানো এক তুলনায়
Bénard প্যাট্রিক


6

এটি @ চেসের উত্তরের সম্প্রসারণ, এই সুবিধা দিয়ে যে এটি আইই 9 তে কেবল ডিআইভি নয়, চিত্র এবং টেবিল উপাদানগুলির জন্য কাজ করবে।

if (document.createRange) {
    // IE9 and modern browsers
    var r = document.createRange();
    r.setStartBefore(to_copy);
    r.setEndAfter(to_copy);
    r.selectNode(to_copy);
    var sel = window.getSelection();
    sel.addRange(r);
    document.execCommand('Copy');  // does nothing on FF
} else {
    // IE 8 and earlier.  This stuff won't work on IE9.
    // (unless forced into a backward compatibility mode,
    // or selecting plain divs, not img or table). 
    var r = document.body.createTextRange();
    r.moveToElementText(to_copy);
    r.select()
    r.execCommand('Copy');
}

5

দেখে মনে হচ্ছে আমি প্রশ্নটি ভুলভাবে লিখেছি, তবে রেফারেন্সের জন্য, আপনি ক্লোপবোর্ডের আচরণ পেতে ডম এর একটি পরিসর (ক্লিপবোর্ডে নয়; সমস্ত আধুনিক ব্রাউজারের সাথে সামঞ্জস্যপূর্ণ) এক্সট্রাক্ট করতে পারেন এবং এটিকে অনকপি এবং অনপ্যাসেট এবং অনফোরপ্যাসস্ট ইভেন্টগুলির সাথে একত্রিত করতে পারেন। এটি অর্জনের জন্য কোডটি এখানে:

function clipBoard(sCommand) {
  var oRange=contentDocument.createRange();
  oRange.setStart(startNode, startOffset);
  oRange.setEnd(endNode, endOffset);
/* This is where the actual selection happens.
in the above, startNode and endNode are dom nodes defining the beginning 
and end of the "selection" respectively. startOffset and endOffset are 
constants that are defined as follows:

END_TO_END: 2
END_TO_START: 3
NODE_AFTER: 1
NODE_BEFORE: 0
NODE_BEFORE_AND_AFTER: 2
NODE_INSIDE: 3
START_TO_END: 1
START_TO_START: 0

and would be used like oRange.START_TO_END */
      switch(sCommand) {
    case "cut":
          this.oFragment=oRange.extractContents();
      oRange.collapse();
      break;
    case "copy":
      this.oFragment=oRange.cloneContents();
      break;
    case "paste":
      oRange.deleteContents();
      var cloneFragment=this.oFragment.cloneNode(true)
      oRange.insertNode(cloneFragment);
      oRange.collapse();
      break;
  }
}

1
আসলে আমি কোড সংশোধন করেছি। এটি সমস্ত ব্রাউজারে কাজ করে তবে ক্লিপবোর্ডে আসলে অনুলিপি করে না। ভেরিয়েবলের মাধ্যমে কেবল এক্সট্রাক্ট (কাট), ক্লোন (অনুলিপি) সামগ্রী দেখে মনে হচ্ছে আমি ব্যবহারটি ভুলে গেছি।
mrBorna

5

আমার খারাপ। এটি কেবল আইইতে কাজ করে।

এখানে পাঠ্য অনুলিপি করার আরও একটি উপায় রয়েছে:

<p>
    <a onclick="window.clipboardData.setData('text', document.getElementById('Test').innerText);">Copy</a>
</p>

9
এটি বর্তমান ক্রোম (ভি 31) বা ফায়ারফক্স (ভি 25) এ কাজ করে না। ত্রুটিটি হ'ল উইন্ডো.ক্লিপবোর্ড ডেটা অপরিজ্ঞাত। প্লাস সাইডে, এটি আইই 9 তে কাজ করে। সুতরাং যতক্ষণ না আপনি ভাল ব্রাউজারগুলির বিষয়ে চিন্তা করেন না এবং খারাপ সাইট ব্যবহার করে আপনার সাইটটিকে লক করতে চান, আপনার পক্ষে এটি করার উপায় এটিই!
অ্যান্টনি

2
আমি এত বোকা উত্তর কেন পাই না। w3schools.com/howto/tryit.asp?filename=tryhow_js_copy_clipboard
মার্টিয়ান 2049

5

ইন্টারনেটে বিভিন্ন উপায়ে অনুসন্ধান করার পরে আমি এই কাজটি করতে পেরেছিলাম। এটি একটি অগোছালো বিষয়। বিশ্বজুড়ে প্রচুর সমাধান পোস্ট করা হয়েছে এবং তাদের বেশিরভাগ কাজ করে না । এটি আমার পক্ষে কাজ করেছে:

দ্রষ্টব্য: এই কোডটি কেবল তখনই 'অনক্লিক' পদ্ধতির মতো কিছুতে সরাসরি সিঙ্ক্রোনাস কোড হিসাবে সম্পাদিত হলে কাজ করবে। আপনি যদি অজ্যাক্সের জন্য একটি অ্যাসিনক্রোনাস প্রতিক্রিয়া বা অন্য কোনও অ্যাসিনক্রোনাস পদ্ধতিতে কল করেন তবে এটি কার্যকর হবে না।

copyToClipboard(text) {
    var copyText = document.createElement("input");
    copyText.type = "text";
    document.body.appendChild(copyText);
    copyText.style = "display: inline; width: 1px;";
    copyText.value = text;
    copyText.focus();
    document.execCommand("SelectAll");
    document.execCommand("Copy");
    copyText.remove();
}

আমি বুঝতে পারি যে এই কোডটি এক মিলি সেকেন্ডের জন্য স্ক্রিনে দৃশ্যমানভাবে 1 পিক্সেল প্রশস্ত উপাদান প্রদর্শন করবে, তবে সে সম্পর্কে চিন্তা না করার সিদ্ধান্ত নিয়েছে, যা এমন একটি বিষয় যা অন্যেরা যদি সত্যিকারের সমস্যা সমাধান করতে পারে।


5

আপনার ক্লিপবোর্ডে একটি নির্বাচিত পাঠ্য ('টেক্সট টু কপি') অনুলিপি করতে, একটি বুকমার্কলেট তৈরি করুন (জাভাস্ক্রিপ্ট চালায় এমন ব্রাউজার বুকমার্ক) এবং এটি সম্পাদন করুন (এটিতে ক্লিক করুন)। এটি একটি অস্থায়ী পাঠ্য তৈরি করবে।

গিটহাব থেকে কোড:

https://gist.github.com/stefanmaric/2abf96c740191cda3bc7a8b0fc905a7d

(function (text) {
  var node = document.createElement('textarea');
  var selection = document.getSelection();

  node.textContent = text;
  document.body.appendChild(node);

  selection.removeAllRanges();
  node.select();
  document.execCommand('copy');

  selection.removeAllRanges();
  document.body.removeChild(node);
})('Text To Copy');
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.