玩转CSDN

仅供参考学习

当前为 2021-09-07 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name 玩转CSDN
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1003
  5. // @match *://blog.csdn.net/*
  6. // @icon https://source.unsplash.com/random
  7. // @description 仅供参考学习
  8. // @author w2hi
  9. // @icon https://www.google.com/s2/favicons?domain=csdn.net
  10. // @grant none
  11. // ==/UserScript==
  12.  
  13. (function() {
  14. 'use strict';
  15. class CSDN{
  16. construct(focusSwitch){
  17. console.log('构造方法');
  18. };
  19.  
  20. /*
  21. @name 复制
  22. @func
  23. modifyCopyPriviledge: 修改权限
  24. copy: 复制逻辑
  25. */
  26. modifyCopyPriviledge(codeElem,signElem){
  27. //代码容器修改
  28. codeElem.removeAttribute('onclick');
  29. codeElem.style.setProperty('user-select','auto');
  30. codeElem.setAttribute('id','code-'+i);
  31. codeElem.parentNode.style.setProperty('user-select','auto');
  32. // 登录(不可用)容器修改
  33. signElem.removeAttribute('onclick');
  34. signElem.setAttribute('data-title','点击复制');
  35. signElem.removeAttribute('data-report-click');
  36. signElem.setAttribute('data-clipboard-action','copy');
  37. signElem.setAttribute('aria-label','copied!');
  38. signElem.setAttribute('data-clipboard-target','#code-'+i);
  39. };
  40. copy(signElem) {
  41. let codeelem = null;
  42. try{
  43. codeelem = signElem.parentNode;
  44. if(codeelem.id.indexOf('code')===-1){ // 父节点
  45. throw new EvalError('值错误');
  46. }
  47. }catch(err){// 兄弟节点
  48. codeelem = signElem.previousElementSibling;
  49. }
  50. document.oncopy=function(e){
  51. e.clipboardData.setData('text',codeelem.innerText);
  52. e.preventDefault();
  53. document.oncopy=null;
  54. }
  55. document.execCommand("Copy");// 执行浏览器复制命令
  56. signElem.setAttribute('data-title','复制成功');
  57. signElem.style.cssText += 'background-color: green';
  58. setTimeout(()=>{ // 先延时1000ms,再执行回调函数
  59. signElem.setAttribute('data-title','点击复制');
  60. signElem.style.removeProperty('background-color','green');
  61. },1000);
  62. };
  63. /*
  64. @name 专注模式
  65. @func
  66. modifyFocusPriviledge: 修改专注权限
  67. showFocusModel: 展开专注模式
  68. */
  69. modifyFocusPriviledge(mainBox, main){
  70. // 修改toolbar
  71. let toolbar = document.querySelector('.csdn-side-toolbar');
  72. let focusSwitch = document.querySelector('.option-box').cloneNode(true);
  73. focusSwitch.firstElementChild.src = 'https://s1.aigei.com/src/img/png/05/055f0df239ef4451a25be1e5c4617f96.png?imageMogr2/auto-'+
  74. 'orient/thumbnail/!199x199r/gravity/Center/crop/199x199/quality/85/&e=1735488000&'+
  75. 'token=P7S2Xpzfz11vAkASLTkfHN7Fw-oOZBecqeJaxypL:pxpJ0L3fOUppABVi15gOFs94eqk=';
  76. focusSwitch.style.background = "rgba(0,0,0,0.1)";
  77. focusSwitch.firstElementChild.style.width = "200%";
  78. focusSwitch.firstElementChild.style.display = "block"; // 去除初始鼠标放上有动态加载事件
  79. // focusSwitch.lastElementChild.innerHTML = "专注<br/>模式";
  80. focusSwitch.removeChild(focusSwitch.lastElementChild);
  81. toolbar.replaceChildren(focusSwitch);
  82. // 修改默认页面配置样式
  83. main.removeAttribute('id');
  84. focusSwitch.removeAttribute('mouseup');
  85. mainBox.firstElementChild.nextElementSibling.style.removeProperty('z-index');
  86. main.style.cssText += 'z-index:999;position:absolute';
  87. main.style.display = 'none';
  88. document.body.insertBefore(main, document.body.firstElementChild);
  89. return focusSwitch;
  90. };
  91. showFocusModel(status, mainBox, main){
  92. if(status===0){ // 进入专注模式
  93. console.log(`----${status}: 专注模式----`)
  94. mainBox.style.display = 'none';
  95. mainBox.nextElementSibling.style.display = 'none';
  96. main.style.display = 'block';
  97. console.log('主体可见\n全体不可见')
  98. // rightAside.style.setProperty('display','none');
  99. // mainBox.firstElementChild.style.setProperty('display','auto');
  100. // con.replaceChildren(mainBox.firstElementChild);
  101. }else{ // 默认-1 原始状态
  102. console.log(`----${status}: 初始模式----`);
  103. mainBox.style.display = 'block';
  104. mainBox.nextElementSibling.style.display = 'block';
  105. main.style.display = 'none';
  106. console.log('主体不可见\n全体可见')
  107. // mainBox.style.removeProperty('display','none');
  108. // rightAside.style.removeProperty('display','none');
  109. // con.replaceChildren(mainBox);
  110. // con.append(rightAside);
  111.  
  112. }
  113. // document.body.replaceChild(mainContent,nodata);
  114. }
  115. };
  116.  
  117. let csdn = new CSDN();
  118. let mainBox = document.getElementById('mainBox');
  119. let main = mainBox.firstElementChild.cloneNode(true);
  120. let focusSwitch = csdn.modifyFocusPriviledge(mainBox, main); //
  121. let status = -1;
  122. focusSwitch.addEventListener('click', function(){
  123. status = ~status;
  124. csdn.showFocusModel(status,mainBox,main);
  125. },'true');
  126. let codes = document.querySelectorAll('#content_views pre code');
  127. let signs = document.querySelectorAll('.signin');
  128. for(var i=0;i<codes.length;i++){
  129. let sign = signs[i];
  130. // 代码容器权限修改
  131. csdn.modifyCopyPriviledge(codes[i], signs[i]);
  132. // 增加登录(不可用)元素的点击事件(捕获-由子到根)
  133. sign.addEventListener('click', function(){
  134. csdn.copy(this);
  135. },'true');
  136. };
  137. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址