ජාවාස්ක්‍රිප්ට් හි ඇති ක්ලිප් පුවරුවට පිටපත් කරන්නේ කෙසේද?


3332

ක්ලිප් පුවරුවට පෙළ පිටපත් කිරීමට හොඳම ක්‍රමය කුමක්ද? (බහු බ්‍රව්සරය)

මම උත්සාහ කර ඇත:

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.

ෆ්ලෑෂ් නොමැතිව ලස්සන උපක්‍රමයක්: ට්‍රෙලෝ පරිශීලකයාගේ ක්ලිප් පුවරුවට ප්‍රවේශ වන්නේ කෙසේද?


කුතුහලයෙන් යුතුව, පරිශීලකයාට තමන් විසින්ම කළ නොහැකි ක්ලිප් පුවරුවට පිටපත් කිරීමට ඔබට අවශ්‍ය කුමක්ද?
ස්කන්ලිෆ්

234
විශේෂ කිසිවක් නැත. ඔවුන්ට එය තනිවම කළ හැකි නමුත් පෙළෙහි නිවැරදි කොටස තෝරා ගැනීම ගැන කරදර නොවී බොත්තමක් ක්ලික් කිරීමේ හැකියාව ද ලබා දීමට මට අවශ්‍යය.
සන්තියාගෝ කොරෙඩොයිරා


එය බ්‍රව්සරයට IE හි මෙන්ම FF
Jagadeesh

1
අපට පරිශීලකයාගේ ක්ලිප් පුවරුවට පෙළ දැමිය හැකි නම්, අපට ඔහුගේ ක්ලිප් පුවරුව විනාශ කළ හැකිය.
ෆ්‍රෑන්ක් ෆැන්ග්

Answers:


2257

දළ විශ්ලේෂණය

ක්ලිප් පුවරුවට පිටපත් කිරීම සඳහා ප්‍රාථමික බ්‍රව්සර් ඒපීඅයි තුනක් ඇත:

  1. අසින්ක් ක්ලිප්බෝඩ් API [navigator.clipboard.writeText]
    • පෙළ කේන්ද්‍ර කරගත් කොටස Chrome 66 (2018 මාර්තු) හි ඇත
    • ප්‍රවේශය අසමමුහුර්ත වන අතර ජාවාස්ක්‍රිප්ට් පොරොන්දු භාවිතා කරයි , ලිවිය හැකි බැවින් ආරක්ෂක පරිශීලක විමසීම් (ප්‍රදර්ශනය කරන්නේ නම්) පිටුවේ ඇති ජාවාස්ක්‍රිප්ට් වලට බාධා නොකරන්න.
    • පෙළ විචල්‍යයකින් සෘජුවම ක්ලිප් පුවරුවට පිටපත් කළ හැකිය.
    • HTTPS හරහා සේවය කරන පිටුවල පමණක් සහය දක්වයි.
    • ක්‍රෝම් 66 හි සක්‍රීය ටැබ් වල පිටු අවසර පත්‍රයක් නොමැතිව ක්ලිප් පුවරුවට ලිවිය හැකිය.
  2. document.execCommand('copy')
    • බොහෝ බ්‍රව්සර් 2015 අප්‍රේල් වන විට මේ සඳහා සහය දක්වයි (පහත බ්‍රව්සර් සහාය බලන්න).
    • ප්‍රවේශය සමමුහුර්තයි, එනම් ප්‍රදර්ශනය සහ පරිශීලකයා ඕනෑම ආරක්ෂක විමසුමක් සමඟ අන්තර්ක්‍රියා කිරීම ඇතුළුව සම්පූර්ණ වන තුරු පිටුවේ ජාවාස්ක්‍රිප්ට් නතර කරයි.
    • පෙළ DOM වෙතින් කියවා ක්ලිප් පුවරුවේ තබා ඇත.
    • පරීක්ෂා කිරීමේදී ~ අප්රේල් 2015 ඉන්ටර්නෙට් එක්ස්ප්ලෝරර් පමණක් ක්ලිප් පුවරුවට ලිවීමේදී අවසර පෙන්වීම ඉල්ලා සිටි බව සටහන් විය.
  3. පිටපත් සිදුවීම අභිබවා යාම
    • පිටපත් කිරීමේ සිදුවීම ඉක්මවා යාම පිළිබඳ ක්ලිප්බෝඩ් API ප්‍රලේඛනය බලන්න .
    • ඕනෑම පිටපත් සිදුවීමකින් ක්ලිප් පුවරුවේ දිස්වන දේ වෙනස් කිරීමට ඔබට ඉඩ දෙයි, සරල පෙළ හැර වෙනත් දත්ත ආකෘති ඇතුළත් කළ හැකිය.
    • ප්‍රශ්නයට කෙලින්ම පිළිතුරු නොදෙන බැවින් මෙහි ආවරණය නොවේ.

සාමාන්‍ය සංවර්ධන සටහන්

ඔබ කොන්සෝලය තුළ කේතය පරීක්ෂා කරන අතරතුර ක්ලිප්බෝඩ් ආශ්‍රිත විධානයන් ක්‍රියාත්මක වනු ඇතැයි අපේක්ෂා නොකරන්න. සාමාන්‍යයෙන් පිටුව සක්‍රිය වීමට අවශ්‍ය වේ (අසින්ක් ක්ලිප්බෝඩ් ඒපීඅයි) හෝ ( document.execCommand('copy')) පරිශීලක ක්ලික් කිරීමක්) ( ) පරිශීලක ක්ලික් කිරීම) ක්ලිප් පුවරුවට ප්‍රවේශ වීමට ඉඩ දීම සඳහා වැඩි විස්තර සඳහා පහත බලන්න.

වැදගත් (මෙහි සටහන් 2020/02/20)

මෙම ලිපිය මුලින් ලියා ඇති බැවින් හරස් සම්භවයක් ඇති IFRAMEs සහ අනෙකුත් IFRAME "සෑන්ඩ්බොක්සිං" මඟින් කාවැද්දූ නිරූපණ "ධාවන කේත ස්නිපෙට්" බොත්තම් සහ "codepen.io උදාහරණය" සමහර බ්‍රව්සර්වල (ක්‍රෝම් සහ මයික්‍රොසොෆ්ට් එජ් ඇතුළුව) වැඩ කිරීමෙන් වළක්වයි. ).

ඔබේම වෙබ් පිටුවක් නිර්මාණය කිරීම සංවර්ධනය කිරීම සඳහා, HTTPS සම්බන්ධතාවය හරහා එම පිටුවට සේවය කරන්න.

කේතය ක්‍රියා කරන ආකාරය පෙන්වන පරීක්ෂණ / ආදර්ශන පිටුවක් මෙන්න: 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>

(codepen.io උදාහරණයක් වැඩ නැති විය හැකි, ඉහත "වැදගත්" සටහනක් කියවා) සටහන මෙම ඇබිත්ත Stack පමාණය ගේ කාවැද්දූ පෙරදසුනෙහි හොඳින් වැඩ කරන්නේ නැති බව ඔබ මෙහි එය කරන්න: https://codepen.io/DeanMarkTaylor/pen/RMRaJX?editors = 1011

අසින්ක් ක්ලිප්බෝඩ් API

ක්‍රෝම් 66 හි අවසර API හරහා "අවසර ඉල්ලීමට" සහ ක්ලිප්බෝඩ් වෙත ප්‍රවේශ වීමට හැකියාවක් ඇති බව සලකන්න.

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 ('copy')

මෙම ලිපියේ ඉතිරි කොටස 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.0 ඒ 1 සහ ඉන්ටර්නෙට් එක්ස්ප්ලෝරර් 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')ඇමතුම් පරිශීලක ක්‍රියාවක result ජු ප්‍රති result ලයක් ලෙස සිදුවිය යුතුය, උදා: සිදුවීම් හසුරුවන්න ක්ලික් කරන්න. මෙය පරිශීලකයාගේ ක්ලිප්බෝඩ් එක අපේක්ෂා නොකරන විට අවුල් වීම වැළැක්වීමේ පියවරකි.

වැඩි විස්තර සඳහා ගූගල් සංවර්ධකයින්ගේ සටහන බලන්න .

ක්ලිප්බෝඩ් API

සම්පූර්ණ ක්ලිප්බෝඩ් API කෙටුම්පත් පිරිවිතර මෙහි සොයාගත හැකි බව සලකන්න: https://w3c.github.io/clipboard-apis/

එයට සහාය ලැබේද?

  • document.queryCommandSupported('copy')true"බ්‍රව්සරයෙන් සහය දක්වන්නේ නම්" විධානය නැවත පැමිණිය යුතුය .
  • හා document.queryCommandEnabled('copy')නැවත trueනම්, document.execCommand('copy')දැන් ලෙස නම් සාර්ථක වනු ඇත. පරිශීලකයා විසින් ආරම්භ කරන ලද නූල් එකකින් විධානය කැඳවා ඇති බව තහවුරු කර ගැනීම සඳහා පරීක්ෂා කිරීම සහ වෙනත් අවශ්‍යතා සපුරාලනු ලැබේ.

කෙසේ වෙතත්, බ්‍රව්සර් අනුකූලතා ගැටළු සඳහා උදාහරණයක් ලෙස, ගූගල් ක්‍රෝම් ~ අප්‍රේල් සිට 2015 ඔක්තෝබර් trueදක්වා ආපසු පැමිණියේ document.queryCommandSupported('copy')පරිශීලක ආරම්භක නූල් එකකින් විධානය කැඳවනු ලැබුවහොත් පමණි .

අනුකූලතා විස්තර පහත සටහන් කරන්න.

බ්‍රව්සර් අනුකූලතා විස්තරය

පරිශීලක ක්ලික් කිරීමක ප්‍රති called ලයක් ලෙස / බ්ලොක් document.execCommand('copy')එකක ඔතා ඇති සරල ඇමතුමක් ඔබට වඩාත්ම ගැළපුම ලබා දෙනු ඇත පහත සඳහන් විධිවිධාන ඇත:trycatch

ඕනෑම ඇමතුමක් document.execCommand, document.queryCommandSupportedහෝ / බ්ලොක් document.queryCommandEnabledඑකකින් ඔතා තිබිය යුතුය .trycatch

විවිධ බ්‍රව්සර් ක්‍රියාත්මක කිරීම් සහ බ්‍රව්සර් අනුවාදයන් නැවත පැමිණීම වෙනුවට කැඳවූ විට විවිධ ආකාරයේ ව්‍යතිරේකයන් විසි falseකරයි.

විවිධ බ්‍රව්සර් ක්‍රියාත්මක කිරීම් තවමත් ප්‍රවාහයේ පවතින අතර ක්ලිප්බෝඩ් ඒපීඅයි තවමත් කෙටුම්පතේ ඇත, එබැවින් ඔබේ පරීක්ෂණය සිදු කිරීමට මතක තබා ගන්න.


41
විචල්ය දත්ත .ie සෘජුවම පිටපත් කිරීමට ආකාරය: var str = "word";?
jscripter

10
Ub බුබුඩාබා <textarea>JS සමඟ සැඟවී ඇති ව්‍යාජයක් සාදන්න , එය එකතු කරන්න document.body, එහි අගය විචල්‍යයට සකසා එය වේගයෙන් භාවිතා කරන්න copyTextarea, ඉන්පසු අන්තර්ගතය පිටපත් කළ වහාම එය ඉවත් කරන්න.
සීනොප්සිස්

3
සෆාරි සඳහා යමක් තිබේද? නැතහොත් එය සෆාරි හි ක්‍රියාත්මක වන බවට කිසියම් දර්ශකයක් තිබේද?
www139

3
සියලුම බ්‍රව්සර්වල ක්‍රියාත්මක වන බව මට හමු වූ එකම අනුවාදය. මෙය බූස්ට්‍රැප් මොඩලයේ භාවිතා කරන විට මට හමු විය. ඔබේ විසඳුම සඳහා මට හැකි නම් මම +1000 ක් දෙන්නෙමි !!! ස්තූතියි!
පැට්‍රික්

3
YaAyaSalama ප්‍රධාන කරුණ නම්, පරිශීලකයා ක්‍රියා කරන බ්‍රව්සරයට නොපෙනේ නම් “පිටපත්” ක්‍රියාව සිදු කළ නොහැකි වීමයි. මූලද්රව්යය "සංදර්ශකය: කිසිවක් නැත" ලෙස හැඩගස්වා ඇත්නම් එය දැකීමට හෝ එය සමඟ අන්තර් ක්රියා කිරීමට නොහැකි බැවින් පරිශීලකයාට ක්රියා කිරීමට නොහැකි වනු ඇත.
ඩීන් ටේලර්

1258

ක්ලිප්බෝඩ් වෙත ස්වයංක්‍රීයව පිටපත් කිරීම භයානක විය හැක, එබැවින් බොහෝ බ්‍රව්සර් (IE හැර) එය ඉතා අපහසු කරයි. පුද්ගලිකව, මම පහත සරල උපක්‍රමය භාවිතා කරමි:

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

පිටපත් කළ යුතු පා already ය දැනටමත් තෝරාගෙන ඇති පරිශීලකයාට විමසුම් කොටුව ඉදිරිපත් කරනු ලැබේ. දැන් එය 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
"කඩිනම්" ශ්‍රිතය අභිරුචි මොඩලයකට වෙනස් කිරීම ඉතා සුළු කාරණයකි, උපක්‍රමයේ මස් යනු සංස්කරණය කළ හැකි අන්තර්ගත ක්ෂේත්‍රයක් භාවිතා කිරීම සහ පා pre ය කලින් තෝරා ගැනීම සහ පරිශීලකයා පරිශීලකයා රැගෙන යන ලෙස බල කිරීමෙන් බ්‍රව්සරයේ UI බිඳ නොදැමීම ය. තමන්ම ක්‍රියා කරන්න. A ++
Jon z


23
ඔබේ පෙළ අක්ෂර 2000 ට වඩා වැඩි නම් එය කපා දමනු ඇත, නමුත් කුඩා පෙළ සාම්පල සඳහා එය විශිෂ්ට ලෙස ක්‍රියා කරයි
RasTheDestroyer

445
පුදුමයට කරුණක් නම්, මෙම ප්‍රශ්නයට පිළිතුරු නොදෙන අතර 457 ක් ඉහළට යාමයි: ජාවාස්ක්‍රිප්ට් හි ඇති ක්ලිප් පුවරුවට පිටපත් කරන්න !
stevenvh

301

පහත දැක්වෙන ප්‍රවේශය ක්‍රෝම්, ෆයර්ෆොක්ස්, ඉන්ටර්නෙට් එක්ස්ප්ලෝරර් සහ එජ් සහ සෆාරි හි මෑත සංස්කරණ වල ක්‍රියාත්මක වේ (පිටපත් සහාය 2016 ඔක්තෝම්බර් මාසයේදී නිකුත් කරන ලද 10 වන සංස්කරණයේ එකතු කරන ලදි).

  • පා a යක් සාදන්න සහ එහි අන්තර්ගතය ඔබට ක්ලිප් පුවරුවට පිටපත් කිරීමට අවශ්‍ය පෙළට සකසන්න.
  • පෙළ යන්ත්‍රය DOM වෙත එකතු කරන්න.
  • Textarea හි පෙළ තෝරන්න.
  • Document.execCommand අමතන්න ("පිටපත")
  • පෙළෙන් ඩොමරයෙන් ඉවත් කරන්න.

සටහන: ජාවාස්ක්‍රිප්ට් කේතයේ සමමුහුර්ත ආයාචනය තුළ එය එකතු කර ඉවත් කර ඇති බැවින් ඔබට පෙළක් නොපෙනේ.

ඔබ මෙය ක්‍රියාත්මක කරන්නේ නම් අවධානයෙන් සිටිය යුතු කරුණු කිහිපයක්:

  • ආරක්ෂක හේතූන් මත, මෙය ඇමතිය හැක්කේ ක්ලික් කිරීම වැනි සිදුවීම් හසුරුවන්නෙකුගෙන් පමණි (කවුළු විවෘත කිරීම මෙන්).
  • ක්ලිප්බෝඩ් යාවත්කාලීන කළ පළමු වරට ඉන්ටර්නෙට් එක්ස්ප්ලෝරර් අවසර සංවාදයක් පෙන්වනු ඇත.
  • ඉන්ටර්නෙට් එක්ස්ප්ලෝරර්, සහ ටෙක්ස්ට්ආරියා කේන්ද්‍රගත වූ විට එඩ්ජ් අනුචලනය වේ.
  • execCommand () සමහර අවස්ථාවල විසි කළ හැකිය.
  • ඔබ පෙළක් භාවිතා නොකරන්නේ නම් නව රේඛා සහ ටැබ් ගිල දැමිය හැකිය. (බොහෝ ලිපි වල div භාවිතා කිරීම නිර්දේශ කරන බව පෙනේ)
  • ඉන්ටර්නෙට් එක්ස්ප්ලෝරර් සංවාද කොටුව පෙන්වන අතරතුර පෙළ දර්ශනය වනු ඇත, ඔබට එය සැඟවිය යුතුය, නැතහොත් ඉන්ටර්නෙට් එක්ස්ප්ලෝරර් විශේෂිත ක්ලිප්බෝඩ් ඩේටා ඒපීඅයි භාවිතා කරන්න.
  • ඉන්ටර්නෙට් එක්ස්ප්ලෝරර් පද්ධති පරිපාලකයින්ට ක්ලිප්බෝඩ් API අක්‍රීය කළ හැකිය.

පහත දැක්වෙන ශ්‍රිතය පහත සඳහන් සියලු ගැටලු හැකිතාක් පිරිසිදුව හැසිරවිය යුතුය. ඔබට කිසියම් ගැටළුවක් ඇත්නම් හෝ එය වැඩිදියුණු කිරීම සඳහා යෝජනා තිබේ නම් කරුණාකර අදහස් දක්වන්න.

// 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
හොඳ පිළිතුර: හරස් බ්‍රව්සර සහාය, දෝෂ හැසිරවීම + පිරිසිදු කිරීම. QueryCommandSupported සඳහා අද ඇති නව සහය අනුව, ක්ලිප්බෝඩ් වෙත පිටපත් කිරීම දැන් ජාවාස්ක්‍රිප්ට් හි කළ හැකි අතර මෙය අමුතු 'window.prompt "වෙනුවට පිළිගත් පිළිතුර විය යුතුය. window.clipboardData IE9 හි සහය දක්වයි, එබැවින් ඔබ බ්‍රව්සර් ආධාරක ලැයිස්තුවට IE9 එකතු කළ යුතු අතර IE8 සහ ඊට පෙරද විය හැකි යැයි මම සිතමි, නමුත් සත්‍යාපනය කළ යුතුය.
user627283

ඔව්. IE 8/9 හරි විය යුතුයි. අපගේ යෙදුම ඔවුන්ට සහාය නොදක්වයි. ඒ නිසා මම අත්හදා බැලුවේ නැහැ. IE ජනවාරි මාසයේ සහාය නතර කරයි, එබැවින් මම එතරම් කලබල නොවෙමි. සෆාරි සහයෝගය ළඟදීම ලැබෙනු ඇතැයි බලාපොරොත්තු වෙමු. මට විශ්වාසයි එය ඔවුන්ගේ රේඩාර් මත ඇති බව.
ග්‍රෙග් ලෝව්

4
Ant සන්තියාගෝ කෝර්ඩෙයිරා: 2016 දී මෙය පිළිගත් පිළිතුර විය යුතුය. කරුණාකර BGT (විශාල හරිත ටික්) නැවත පැවරීම සලකා බලන්න.
ලෝරන්ස් ඩොල්

3
O නොයිටිඩාර්ට් මම පරීක්‍ෂා කළ අතර එය ෆයර්ෆොක්ස් 54, ක්‍රෝම් 60 සහ එජ් බ්‍රව්සර් සඳහා පරිපූර්ණව ක්‍රියා කරයි, HTML ලේඛනයේ අවධානය යොමු නොවූවත්, ඔබ සතුව ඇති දෝෂය බොහෝ විට එෆ්එෆ් 55 අනුවාදයට විශේෂිත වේ
ටොසින් ජෝන්

2
ONoitidart එය තවමත් මෙහි පරිපූර්ණව ක්‍රියාත්මක වන අතර, dev මෙවලම් කෙරෙහි අවධානය යොමු කිරීම එය නතර කළේ නැත. මාර්ගය වන විට, සාමාන්‍ය වෙබ් යෙදුම් පරිශීලකයෙකු සංවර්ධක මෙවලම් මත කරන්නේ කුමක්ද
ටොසින් ජෝන්

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;
 }

orakorayem: html inputක්ෂේත්‍රය භාවිතා කිරීමෙන් රේඛා බිඳීම් වලට ගරු නොකරන අතර \nඕනෑම පෙළක් තනි පේළියකට සමතලා කරනු ඇත.

අදහස් දැක්වීමේදී iknikksan සඳහන් කළ පරිදි, භාවිතා 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;
}

iknikksan සමඟ නූල පිටපත් කරන්නේ \nකෙසේද?
sof-03

2
input \r\n
sof

1
Win10x64 හි මයික්‍රොසොෆ්ට් එජ් 42.17134.1.0 හි වැඩ නොකෙරේ
හොන්සා ස්ටුනා

3
මම ඔබේ පිළිතුර පිටපත් කළා. එය ක්‍රෝම් වල ක්‍රියාත්මක වන අතර මට අවශ්‍ය වන්නේ එපමණයි.
user875234

ෆයර්ෆොක්ස් v68.0.2 (64-බිට්) සමඟ ක්‍රියා කරන සරලම විසඳුම මෙයයි.
ආර්ය

88

ඔබට සැබවින්ම සරල විසඳුමක් අවශ්‍ය නම් (ඒකාබද්ධ වීමට මිනිත්තු 5 කට වඩා අඩු කාලයක් ගතවේ) සහ කොටුවෙන් පිටත සිට හොඳ පෙනුමක් තිබේ නම්, ක්ලිපි තිබේ නම්, වඩාත් සංකීර්ණ විසඳුම් කිහිපයකට කදිම විකල්පයකි.

එය ලියා ඇත්තේ GitHub හි සම නිර්මාතෘවරයෙකි. උදාහරණ ෆ්ලෑෂ් කාවැද්දීමේ කේතය පහතින්:

<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}with ය හා වර්ණයක් ආදේශ කිරීමට මතක තබා ගන්න .


12
උනන්දුවක් දක්වන ඕනෑම අයෙකුට, repo සඳහා URL ය පිටපත් කිරීමේදී GitHub හි ක්ලිප්පි භාවිතා කරන්නේදැයි පරීක්ෂා කරන්න.
රාඩෙක්

66
FYI, GitHub හි Clippy භාවිතය ZeroClipboard මගින් ප්‍රතිස්ථාපනය කර ඇත.
ජේම්ස් එම්. ග්‍රීන්

220
OP ට ජාවාස්ක්‍රිප්ට් හි විසඳුමක් අවශ්‍ය විය. ෆ්ලෑෂ් නොවේ.
එම්.ටී.

21
JMT, “ජාවාස්ක්‍රිප්ට්” මගින් සමහර අය අදහස් කරන්නේ “බ්‍රව්සර් සේවාදායකයා තුළ”, එබැවින් JS පමණක් අවශ්‍යතාවයක් විය හැකි නමුත්, මෙම පිළිතුරට අවස්ථාව ලැබෙන බොහෝ අය සැබවින්ම සොයන්නේ JS හෝ වෙනත් පුළුල් ලෙස සහාය දක්වන- සේවාදායක-තාක්ෂණික. ෆ්ලෑෂ් සියලු වේදිකාවලට පහර දෙන්නේ නැත, නමුත් ක්ලිප්බෝඩ් සහාය වැනි ඔප දැමීමේ අංගයක් සඳහා, එය උත්පතන සංවාදයක් හරහා යූඑක්ස් වැඩි දියුණු කරන්නේ නම් එය එකතු කිරීම වටී (එය නිසැකවම එය කරයි).
ඩේව් ඩොප්සන්

13
දැන් ෆ්ලෑෂ් මත යැපීම යන්නෙන් අදහස් කරන්නේ වෙබ් අඩවි නරඹන්නන්ගෙන් ප්‍රතිශතයක් සඳහා වැඩ නොකරන දේවල් තිබීමයි.
jinglesthula

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
සරල පිටපත් මෙහෙයුමක් සඳහා ෆ්ලෑෂ් භාවිතා කිරීම අතිරික්තයක් සේ පෙනේ, මෙය කිරීමට පිරිසිදු JS ක්‍රමයක් තිබීම සතුටට කරුණකි. අපි ආයතනික පරිසරයක සිටින නිසා. IE හොඳයි. ස්තූතියි බන්ඩි!
එඩී

5
execCommand(\\’copy\\’);IE සඳහා ක්ලිප්බෝඩ් වෙත පිටපත් නොකළහොත් කුමක් කරන්නේද? rmrBorna
RozzA

20
භාවිතා කරන්නේ නැත if(!document.all)නමුත් if(!r.execCommand)එය නිෂ්ඵල නොවන පිණිස, කාටවත් වෙන උපකරණ! Document.all මේ සඳහා නියත වශයෙන්ම අදාළ නොවේ.
m93a

1
මිනිසා, මෙය සරල හා පිරිසිදු කේත වලට මා ප්‍රිය කරන දෙයකි, එය සුළු නඩත්තු කිරීමක් සමඟ සදහටම ක්‍රියාත්මක වේ. මෙය මා වෙනුවෙන් කළා, එය ලස්සනට වැඩ කරයි.
සැමුවෙල් රම්සාන්

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();
});

පද්ධති පිටපත් කිරීමේ අවස්ථාවකදී නොව ක්ලිප් පුවරුවේ පෙළ තැබීම වඩා දුෂ්කර ය. මෙම වෙනත් පිළිතුරු සමහරක් ෆ්ලෑෂ් හරහා කළ හැකි බව පෙනේ, එය කළ හැකි එකම හරස් බ්‍රව්සර ක්‍රමය මෙයයි (මා තේරුම් ගත් පරිදි).

ඒ හැරුණු විට, බ්‍රව්සරයෙන් බ්‍රව්සර් පදනම මත විකල්ප කිහිපයක් තිබේ.

IE හි ඇති වඩාත් සරලම ක්‍රමය මෙය වන අතර ඔබට ජාවාස්ක්‍රිප්ට් වෙතින් ඕනෑම වේලාවක ක්ලිප්බෝඩ් ඩේටා වස්තුව වෙත පිවිසිය හැකිය:

window.clipboardData

(ඔබ මෙය පද්ධති කැපීම, පිටපත් කිරීම හෝ ඇලවීම සිදුවීමකට පිටතින් කිරීමට උත්සාහ කරන විට, කෙසේ වෙතත්, වෙබ් යෙදුම් ක්ලිප්බෝඩ් අවසරය ලබා දීමට IE පරිශීලකයාගෙන් විමසනු ඇත.)

ක්‍රෝම් හි, ඔබට ක්ලිප්බෝඩ් අවසර ලබා දෙන ක්‍රෝම් දිගුවක් නිර්මාණය කළ හැකිය (මෙය අපි ලුසිඩ්චාර්ට් සඳහා කරන්නෙමු). ඔබගේ දිගුව ස්ථාපනය කර ඇති පරිශීලකයින් සඳහා ඔබට පද්ධති සිදුවීම ඔබ විසින්ම වෙඩි තැබිය යුතුය:

document.execCommand('copy');

ෆයර්ෆොක්ස් සතුව සමහර වෙබ් අඩවි වලට ක්ලිප්බෝඩ් වෙත පිවිසීමට අවසර ලබා දෙන විකල්පයන් ඇති බව පෙනේ , නමුත් මම මේ කිසිවක් පෞද්ගලිකව උත්සාහ කර නැත.


2
බ්ලොග් පෝස්ට් එකේ සඳහන් කර නැත (නුදුරු අනාගතයේ දී එය යාවත්කාලීන කිරීමට මම බලාපොරොත්තු වෙමි), යනු execCommand භාවිතයෙන් කැපීම සහ පිටපත් කිරීම අවුලුවාලීමේ හැකියාවයි. මෙය IE10 +, Chrome 43+ සහ Opera29 + වලින් සහය දක්වයි. ඒ ගැන මෙතැනින් කියවන්න. updates.html5rocks.com/2015/04/cut-and-copy-commands
රිචඩ් Shurtz

මෙහි ඇති ගැටළුවක් නම් එය වෙනත් සාමාන්‍ය පිටපත් සිදුවීම් පැහැර ගැනීමයි.
බ්‍රෝක් ඇඩම්ස්

සැ.යු! මෙම බ්‍රව්සරය මිරිකීම BAD වේ. විශේෂාංග මිරිකීම කරන්න. IE යාවත්කාලීන කිරීම ඔබ දුෂ්කර කරයි.
ඔඩින්හෝ - වෙල්මොන්ට්

51

clipboard.js යනු කුඩා, ෆ්ලෑෂ් නොවන, උපයෝගීතාවයක් වන අතර එය පෙළ හෝ HTML දත්ත ක්ලිප් පුවරුවට පිටපත් කිරීමට ඉඩ දෙයි. එය භාවිතා කිරීම ඉතා පහසුය, .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 හි ඇත.

සටහන: මෙය දැන් අතහැර දමා ඇත. මෙතැනට සංක්‍රමණය වන්න .


මෙම පුස්තකාලය angular.io විසින් එහි වීර චාරිකාව සඳහා භාවිතා කරන අතර පරිශීලකයාට පිටපත් කිරීමට පෙර තෝරාගත් පෙළක් ප්‍රදර්ශනය කිරීමෙන් execCommand සඳහා බ්‍රවුසරය සහාය නොදක්වයි.
ජෝන්-පිලිප්

1
එක්කෝ clipboard.js ප්‍රතිස්ථාපනය කර ඇති බව පෙනේ, නමුත් එය ක්‍රියාත්මක වන බව පෙනේ. එය ක්‍රියාකාරීව නඩත්තු කරනු ලබන්නේ npmjs.com/package/clipboard
Joao

35

ZeroClipboard යනු මා සොයාගත් හොඳම හරස් බ්‍රව්සර් විසඳුමයි:

<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>

ඔබට iOS සඳහා ෆ්ලෑෂ් නොවන සහය අවශ්‍ය නම් ඔබ පසුබෑමක් එක් කරන්න:

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
ෆ්ලෑෂ් සමඟ හරස් බ්‍රව්සරය? iOS සහ ඇන්ඩ්‍රොයිඩ් 4.4 හි වැඩ නොකරයි
රැප්ටර්

1
යාවත්කාලීන කළ පිළිතුර බලන්න. මෙය ෆ්ලෑෂ් භාවිතා කරන්නන් සඳහා අඩු පියවරයන් සහ අනෙක් සියල්ලන්ට පසුබැසීමට ඉඩ දෙයි.
ජස්ටින්

9
එහි කේත පේළි බිලියනයක් ඇත. එය සමච්චලයට ලක් කිරීමකි. එවැනි
රාක්ෂයකු

2
74k අනුවාදයේ සියලුම සීනු හා විස්ල් නොමැති 20K වන සරල අනුවාදය gist.github.com/JamesMGreene/8698897 ඇත. දෙකම ඉතා විශාල නොවේ. මගේ අනුමානය නම් බොහෝ පරිශීලකයින් 74k හෝ 20k ගොනුවක් බාගත කර ගත හැකි අමතර මිලි තත්පර සමඟ හොඳින් සිටින බැවින් පිටපත් / පේස්ට් දෙකක් වෙනුවට එක් ක්ලික් කිරීමකි.
ජස්ටින්

Ust ජස්ටින් මම උදාහරණ පිටපත් කර ඇලවූවත් එය දේශීයව වැඩ කිරීමට මට නොහැකිය (මම අවම වෙනස්කම් කරමි, උදා: 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>

මම නූලකින් සමත් වුවහොත් එය පිටපත් කරයි. කිසිවක් නොමැති නම්, එය පිටුවේ URL පිටපත් කරයි.

ක්ලිප්බෝඩ් දේවල් සඳහා තවත් ජිම්නාස්ටික් ද කළ හැකිය. වැඩි විස්තර මෙතැනින් බලන්න:

ක්ලිප්බෝඩ් ප්‍රවේශය අවහිර කිරීම


ඔබ localhost සමඟ සම්බන්ධ වී ඇත
ජෝ වෝනර්

2
මෙය සෆාරි (11.1.2 වෙළුම) තුළ ක්‍රියාත්මක නොවන බව කරුණාවෙන් සලකන්න
arjun27

1
@ arjun27 හොඳයි කවදාහරි දවසක ඇපල් අල්ලා ගනීවි කියා. මෙම caniuse.com/#feat=clipboard මඟින් ඉහත සඳහන් අනුවාදය අර්ධ වශයෙන් සහය දක්වන බව පෙන්වයි.
KhoPhi

2
මම පහසුකම් දෙකම ප්රතික්ෂේප රාජ්ය readText, writeText වූ පොරොන්දුව සඳහා ලබා කරනවා
ramin

3
සපයා ඇති සබැඳියට අනුව, "navigator.clipboard සඳහා සහය
දක්වන්නේ

26

මම වැඩ කරමින් සිටි එක් ව්‍යාපෘතියකින්, සීරෝ ක්ලිප්බෝඩ් පුස්තකාලය භාවිතා කරන jQuery පිටපත්-සිට-ක්ලිප්බෝඩ් ප්ලගිනයක් .

ඔබ අධික jQuery පරිශීලකයෙක් නම් ස්වදේශීය ශුන්‍ය ක්ලිප්බෝඩ් ප්ලගිනයට වඩා භාවිතා කිරීම පහසුය.


6
92kb එතරම් විශාල නොවේ, එය වේගයෙන් ක්‍රියාත්මක text()වන අතර innerHTML()ඔබ කැමති නම් වෙනුවට භාවිතා කළ හැකිය ..
RozzA

17
@ ජෝන්: දීර් innerHTML-කාලයක් තිස්සේ හරස් බ්‍රව්සරයට සහය දක්වයි. මයික්‍රොසොෆ්ට් මුලින් ම අදහස ඉදිරිපත් කළ පමණින් එය විශ්වාසනීය හෝ හිමිකාරීත්වයක් ඇති නොකරයි. එය ද දැන් අවසානයේ නිල පිරිවිතර (සෑම ප්රධාන වෙබ් බ්රව්සරය ඔබම දැනටමත් ඒ සඳහා සහය එක් පසු ... එකතු කිරීම සැනසුම් සුසුමක් ).
ජේම්ස් එම්. ග්‍රීන්

19
@ ජෝන් ෆ්ලෑෂ් භාවිතා කරන පිළිතුරක jQuery ජාවාස්ක්‍රිප්ට් නොමැති වීම ගැන ඔබ පැමිණිලි කරයි;)
මැක්ස් නැනසි

4
අභ්‍යන්තර HTML බොහෝ අවස්ථාවල විකල්පයන්ට වඩා හොඳයි. ඔබේ ඉහළ අශ්වයාගෙන් ඉවත් වන්න! එය වේගවත්, වඩා කාර්යක්ෂම වන අතර පිටුවක් නැවත විදැහුම් කිරීම අවශ්‍ය නොවේ.
ඊඩන්

4
Oz රෝසා 92KBඇත්තෙන්ම විශාලයි. LTE පරිණත වන තුරු GPRS යනු WW ජංගම දත්ත ප්‍රමිතිය වන අතර එය ආරම්භ වේ 1 KB/s. ගණිතය ඔබම කරන්න.
ටිනෝ

23

ක්‍රෝම් 42+ සහ ෆයර්ෆොක්ස් 41+ දැන් document.execCommand ('copy') විධානයට සහය දක්වයි . එබැවින් මම ටිම් ඩවුන්ගේ පැරණි පිළිතුර සහ ගූගල් සංවර්ධකයාගේ පිළිතුරේ සංයෝජනයක් භාවිතා කරමින් හරස් බ්‍රව්සරයේ සිට පිටපතට ක්ලිප්බෝඩ් හැකියාව සඳහා කාර්යයන් කිහිපයක් නිර්මාණය කළෙමි :

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 range = document.createRange ()).
ක්‍රිස්ටියන් එංගල්

1
ඔබ නිවැරදියි @ ක්‍රිස්ටියන් එන්ගල්. මම දෙවැන්න ඉවත් කර ඇත. මම දන්නේ නැහැ ඒක කොහොමද එතනට ආවේ කියලා.
ජෙෆ් බේකර්

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();
}

අවවාදයයි

ටැබ් අවකාශයන් බවට පරිවර්තනය වේ (අවම වශයෙන් Chrome හි).


මෙම ප්‍රවේශයේදී අවකාශය අස්ථානගත වී ඇත
බික්‍රම්

1
Chrome. ටැබ් එක
බික්රාම්

22

මම පහත විසඳුම සොයා ගතිමි:

යතුරු පහළට හසුරුවන්නා විසින් "පෙර" ටැගය නිර්මාණය කරයි. අපි මෙම ටැගය වෙත පිටපත් කිරීම සඳහා අන්තර්ගතය සකසා, පසුව මෙම ටැගය මත තේරීමක් කර හසුරුවන්නාගේ සත්‍යය වෙත ආපසු යන්නෙමු. මෙය සම්මත ක්‍රෝම් හසුරුවන්නා ලෙස හඳුන්වන අතර තෝරාගත් පෙළ පිටපත් කරයි.

ඔබට අවශ්‍ය නම් පෙර තේරීම ප්‍රතිෂ් oring ාපනය කිරීම සඳහා වේලාව නියම කළ හැකිය. මූටූල් පිළිබඳ මගේ ක්‍රියාත්මක කිරීම:

   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;

පේස්ට් කිරීමේදී එය ටෙක්ස්ටාරියා නිර්මාණය කරන අතර එකම ආකාරයකින් ක්‍රියා කරයි.

PS විය හැකිය මෙම විසඳුම ෆ්ලෑෂ් නොමැතිව සම්පූර්ණයෙන්ම හරස් බ්‍රව්සර් විසඳුමක් නිර්මාණය කිරීම සඳහා භාවිතා කළ හැකිය. එෆ්එෆ් සහ ක්‍රෝම් වල එහි ක්‍රියා.


2
කවුරුහරි එය අත්හදා බලා තිබේද? එය බ්‍රව්සර් පරාසයක සැබවින්ම ක්‍රියා කරන්නේ නම්, එය ඉතා සුළු දෙයක් මෙන් පෙනේ!
මයිකල්

1
jsfiddle.net/H2FHC Demo: fiddle.jshell.net/H2FHC/show කරුණාකර එය විවෘත කර Ctrl + V හෝ Ctrl + C ඔබන්න. එෆ්එෆ් 19.0 දෙබලක පරිපූර්ණව. ක්‍රෝම් 25.0.1364.97 මීටර් ද වේ. ඔපෙරා 12.14 - හරි. වින්ඩෝස් සඳහා සෆාරි 5.1.7 - හරි. IE - අසමත්.
එනිබි

IE සඳහා පිටුව තුළ ඇති මූලද්‍රව්‍ය කෙරෙහි අවධානය යොමු කළ යුතුය. Ie 9/10 හි වැඩ කළ fiddle.jshell.net/H2FHC/3/show සහ fiddle.jshell.net/H2FHC/3 බලන්න . IE 6/7 සඳහා ක්‍රියාවලියක් වෙනත් ආකාරයකින් තෝරා ගැනීමේ අවශ්‍යතාවයක් ඇති බැවින් document.createRange සහාය නොදක්වයි.
එනිබි

21

අනෙක් ක්‍රම මඟින් සරල පෙළ ක්ලිප් පුවරුවට පිටපත් කරනු ඇත. HTML පිටපත් කිරීම සඳහා (එනම්, ඔබට ප්‍රති results ල WSIWYG සංස්කාරකයකට ඇලවිය හැකිය), ඔබට පහත සඳහන් දෑ 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();   

වඩාත් සම්පූර්ණ HTML විසඳුම මෙතැනින් බලන්න stackoverflow.com/questions/34191780/…
kofifus

21

හොඳම දේ යැයි මා සිතන දේ මම එකට තබා ඇත්තෙමි.

  • ස්ටයිල් කෙලින්ම නොව ඉන්ටර්නෙට් එක්ස්ප්ලෝරර් හි ව්‍යතිරේකයන් වළක්වා ගැනීමට cssText භාවිතා කරයි.
  • එකක් තිබුනේ නම් තේරීම ප්‍රතිස්ථාපනය කරයි
  • කියවීමට පමණක් සකසන බැවින් යතුරුපුවරුව ජංගම උපාංගවල නොපෙන්වයි
  • IOS සඳහා ක්‍රියාමාර්ගයක් ඇති බැවින් එය සාමාන්‍යයෙන් execCommand අවහිර කරන ආකාරයට ක්‍රියා කරයි.

මේ තියෙන්නේ:

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>


හොඳම පිළිතුර: D, ඔබට මේ වගේ දෙයක් සමඟ එය වැඩිදියුණු කළ හැකිය: #t {position: නිරපේක්ෂ; වමේ: 0; z- දර්ශකය: -900; පළල: 0px; උස: 0px; මායිම: කිසිවක් නැත; } එබැවින් එය සම්පූර්ණයෙන්ම සැඟවී යනු ඇත! නමුත් ඇත්තටම ස්තූතියි සහෝදරයා!
ෆෙඩරිකෝ නවරේට්

#t {ප්‍රමාණය වෙනස් කරන්න: කිසිවක් නැත;}
SmartManoj

පැහැදිලි කිරීමක් පිළිවෙලට වනු ඇත.
පීටර් මෝර්ටෙන්සන්

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

HTML ආදානයේ සිට ක්ලිප් පුවරුවට පෙළ පිටපත් කරන්න:

 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>

සටහන: මෙම document.execCommand()ක්රමය සඳහා Internet Explorer 9 හා ඉන් පෙර කිරීම සඳහා සහාය නොදක්වයි.

මූලාශ්‍රය : W3 පාසල් - පෙළ ක්ලිප් පුවරුවට පිටපත් කරන්න


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 තිබුනා. ආදානය නොපෙන්වන බවට වග බලා ගැනීම සඳහා ඔබට සමහර CSS එකතු කළ හැකිය. උදාහරණයක් ලෙස:

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

නැතහොත් ඇත්ත වශයෙන්ම ඔබට පේළිගත මෝස්තර කිහිපයක්ද කළ හැකිය

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

විචල්ය දත්තයකින් කෙලින්ම පිටපත් කරන්නේ කෙසේද .ie: var str = "වචනය"; ?

විචල්ය msg භාවිතා නොකෙරේ
වොයේජර්

භාවිතය වඩා හොඳ '<textarea class = "textToCopyInput" /> </ textarea>' නඩුවේ textToCopyඅඩංගු\n
වොයේජර්

8

IE හැර වෙනත් බ්‍රව්සර් වලදී, ක්ලිප්බෝඩ් හැසිරවීමට කුඩා ෆ්ලෑෂ් වස්තුවක් භාවිතා කළ යුතුය, උදා


මෙය දැන් යල් පැන ඇත ... GvS විසින් යෝජනා කිරීම බලන්න
Mottie

6
GvS හි යෝජනාව ෆ්ලෑෂ් චිත්‍රපටයක් භාවිතා කරයිද? එකම අදහස නොවේද?
TheEmirOfGroofunkistan

8

(එක්සෙල් වැනි දෙයක්) වෙතින් අභිරුචි ජාලක සංස්කරණයක් සහ එක්සෙල් සමඟ ගැළපුම සෑදීම මට එකම ගැටලුවක් විය. බහු සෛල තෝරා ගැනීම, පිටපත් කිරීම සහ ඇලවීම මට සහාය විය.

විසඳුම: පරිශීලකයාට පිටපත් කිරීම සඳහා දත්ත ඇතුලත් කරන පෙළක් සාදන්න (පරිශීලකයා සෛල තෝරා ගන්නා විට මට), ඒ පිළිබඳව අවධානය යොමු කරන්න (නිදසුනක් ලෙස, පරිශීලක එබූ විට Ctrl ) සහ සම්පූර්ණ පෙළ තෝරන්න.

එබැවින්, පරිශීලකයා Ctrl+ පහර දුන් විටC ඔහු / ඇය තෝරාගත් සෛල පිටපත් කළ විට. පරීක්‍ෂා කිරීමෙන් පසු පෙළ පික්සෙල් එක පික්සෙල් එකකට වෙනස් කිරීම (එය ප්‍රදර්ශනය සඳහා ක්‍රියා කරයිදැයි මම පරීක්ෂා නොකළෙමි: කිසිවක් නැත). එය සියලුම බ්‍රව්සර්වල හොඳින් ක්‍රියාත්මක වන අතර එය පරිශීලකයාට විනිවිද පෙනෙන ය.

ඇලවීම - ඔබට මේ ආකාරයටම කළ හැකිය (ඔබේ ඉලක්කයට වඩා වෙනස් වේ) - ටෙක්ස්ටේරියා කෙරෙහි අවධානය යොමු කර ඔන් පේස්ට් භාවිතයෙන් පේස්ට් සිදුවීම් අල්ලා ගන්න (මගේ ව්‍යාපෘතියේ දී මම සංස්කරණය කිරීමට සෛලවල පෙළ භාවිතා කරමි).

මට උදාහරණයක් (වාණිජ ව්‍යාපෘතිය) ඇලවිය නොහැක, නමුත් ඔබට අදහස ලැබෙනු ඇත.


7

මම clipboard.js භාවිතා කර ඇත.

අපට එය npm ට ලබා ගත හැකිය:

npm install clipboard --save

ඒ වගේම බෝවර් වලත්

bower install clipboard --save

භාවිතය සහ උදාහරණ https://zenorocha.github.io/clipboard.js/ හි ඇත .


එය ගතික අන්තර්ගතයට
නොගැළපේ


6

මෙය @ චේස්ගේ පිළිතුරේ විස්තාරණයකි, එය IE9 හි DIVs පමණක් නොව IMAGE සහ TABLE මූලද්‍රව්‍ය සඳහා ක්‍රියා කරනු ඇත.

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

මම ප්‍රශ්නය වැරදියට කියවා ඇති බවක් පෙනේ, නමුත් යොමු කිරීම සඳහා, ඔබට DOM පරාසයක් උකහා ගත හැකිය (ක්ලිප්බෝඩ් කිරීමට නොවේ; සියලු නවීන බ්‍රව්සර් සමඟ අනුකූල වේ), එය ක්ලිප්බෝඩ් හැසිරීම ලබා ගැනීම සඳහා ඔන්කොපි සහ ඔන්පේස්ට් සහ පෙර-පෙර සිදුවීම් සමඟ ඒකාබද්ධ කරන්න. මෙය සාක්ෂාත් කර ගැනීම සඳහා කේතය මෙන්න:

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

මගේ නරක. මෙය ක්‍රියාත්මක වන්නේ IE තුළ පමණි.

පෙළ පිටපත් කිරීමට තවත් ක්‍රමයක් මෙන්න:

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

9
මෙය වත්මන් Chrome (V31) හෝ FireFox (v25) තුළ ක්‍රියා නොකරයි. දෝෂය නම් window.clipboardData නිර්වචනය කර නොමැති වීමයි. ප්ලස් පැත්තේ, එය IE9 හි ක්රියා කරයි. එබැවින් ඔබ හොඳ බ්‍රව්සර් ගැන තැකීමක් නොකරන අතර ඔබේ වෙබ් අඩවිය නරක ඒවා භාවිතා කිරීමට අගුලු දැමීමට අවශ්‍ය තාක් කල්, ඔබට එය කළ හැකි ක්‍රමය මෙයයි!
ඇන්තනි

2
මට මෙතරම් මෝඩ පිළිතුරු ලැබෙන්නේ ඇයිදැයි මට නොතේරේ. w3schools.com/howto/tryit.asp?filename=tryhow_js_copy_clipboard
Martian2049

5

අන්තර්ජාලය පුරා විවිධ ක්‍රම සොයා බැලීමෙන් පසු මා වැඩ කළ එකම දෙය මෙයයි. මෙය අවුල් සහගත මාතෘකාවකි. ලොව පුරා විසඳුම් රාශියක් පළ කර ඇති අතර ඒවායින් බොහොමයක් ක්‍රියාත්මක නොවේ . මෙය මට ප්‍රයෝජනවත් විය:

සටහන: මෙම කේතය ක්‍රියාත්මක වන්නේ 'onClick' ක්‍රමයක් වැනි සෘජු සමමුහුර්ත කේතයක් ලෙස ක්‍රියාත්මක කළ විට පමණි. ඔබ අජැක්ස් වෙත අසමමුහුර්ත ප්‍රතිචාරයක් හෝ වෙනත් අසමමුහුර්ත ආකාරයකින් අමතන්නේ නම් එය ක්‍රියා නොකරනු ඇත.

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 ක පුළුල් සං component ටකයක් තිරයේ දිස්වනු ඇති බව මම දනිමි, නමුත් ඒ ගැන කරදර නොවීමට තීරණය කළෙමි, එය සැබෑ ගැටළුවක් නම් අනෙක් අයට විසඳිය හැකි දෙයකි.


5

තෝරාගත් පෙළක් ('පිටපත් කිරීමට පෙළ') ඔබේ ක්ලිප් පුවරුවට පිටපත් කිරීමට, පොත් සලකුණු (ජාවාස්ක්‍රිප්ට් ක්‍රියාත්මක කරන බ්‍රව්සර් පිටු සලකුණ) නිර්මාණය කර එය ක්‍රියාත්මක කරන්න (එය මත ක්ලික් කරන්න). එය තාවකාලික පෙළක් නිර්මාණය කරයි.

GitHub වෙතින් කේතය:

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');
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.