Stackoverflow Add Button For Copy to clipboard

Stackoverflow Add Button For Copy to clipboard.

目前为 2022-01-05 提交的版本。查看 最新版本

  1. // ==UserScript==
  2.  
  3. // @namespace https://openuserjs.org/users/a29527806
  4. // @name Stackoverflow Add Button For Copy to clipboard
  5. // @description Stackoverflow Add Button For Copy to clipboard.
  6. // @copyright 2022, HrJasn (https://openuserjs.org/users/a29527806)
  7. // @license GPL-3.0-or-later
  8. // @version 1.2
  9. // @icon https://www.google.com/s2/favicons?domain=stackoverflow.com
  10. // @include https://stackoverflow.com/questions/*
  11. // @grant none
  12. // ==/UserScript==
  13.  
  14. // ==OpenUserJS==
  15. // @author a29527806
  16. // ==/OpenUserJS==
  17.  
  18. window.onload = function() {
  19.  
  20. const precodeObjs = document.querySelectorAll('pre code');
  21. const scrollbarChange = function(){
  22. let copyBtn = this.querySelector('input[value="Copy"]');
  23. copyBtn.style.right = (5-this.scrollLeft) + 'px';
  24. copyBtn.style.bottom = (5-this.scrollTop) + 'px';
  25. }
  26.  
  27. precodeObjs.forEach(function(precodeObj){
  28. let copyBtn = document.createElement('input');
  29. copyBtn.type='button';
  30. copyBtn.value='Copy';
  31. copyBtn.style='cursor:pointer;opacity:0;position:absolute;right:5px;bottom:5px;font-size:15px;padding:10px;background-color:#888888;border:0px;border-style:solid;color: #ffffff;text-shadow: 0px 0px 2px #ffffff;border-radius:5px;';
  32. precodeObj.parentNode.style.position = 'relative';
  33. precodeObj.parentNode.appendChild(copyBtn);
  34. precodeObj.parentNode.addEventListener("wheel",scrollbarChange,false);
  35. precodeObj.parentNode.addEventListener("scroll",scrollbarChange,false);
  36. precodeObj.parentNode.addEventListener("keydown",scrollbarChange,false);
  37. copyBtn.addEventListener('click', function(){
  38. let targetObj = this.parentNode;
  39. let srcText = targetObj.textContent || targetObj.innerText || targetObj.nodeValue || '';
  40. navigator.clipboard.writeText(srcText);
  41. //let clipText = navigator.clipboard.readText();
  42. console.log(srcText);
  43. if(srcText !== undefined){
  44. this.value='Copied';
  45. }
  46. });
  47. copyBtn.addEventListener('mouseenter', function(){
  48. this.style.opacity = 1;
  49. });
  50. copyBtn.addEventListener('mouseleave', function(){
  51. this.style.opacity = 0;
  52. });
  53. });
  54.  
  55. }