玩转CSDN

仅供参考学习

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

  1. // ==UserScript==
  2. // @name 玩转CSDN
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1007
  5. // @match *://*.blog.csdn.net/*
  6. // @icon https://source.unsplash.com/random
  7. // @description 仅供参考学习
  8. // @author w2hi
  9. // @grant none
  10. // @reference https://source.unsplash.com/random
  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. try{
  34. signElem.removeAttribute('onclick');
  35. signElem.setAttribute('data-title','点击复制');
  36. signElem.removeAttribute('data-report-click');
  37. signElem.setAttribute('data-clipboard-action','copy');
  38. signElem.setAttribute('aria-label','copied!');
  39. signElem.setAttribute('data-clipboard-target','#code-'+i);
  40. signElem.style.position = 'inherit';
  41. signElem.style.display = "block";
  42. signElem.style.setProperty('max-width','65px');
  43. return true
  44. }catch(e){
  45. return false
  46. }finally{
  47. if(codeElem.nextElementSibling!=signElem){
  48. signElem.style.left = '-70px';
  49. codeElem.parentNode.appendChild(signElem);
  50. }
  51. }
  52. };
  53. copy(signElem) {
  54. let codeelem = null;
  55. try{
  56. codeelem = signElem.parentNode;
  57. if(codeelem.id.indexOf('code')===-1){ // 父节点
  58. throw new EvalError('值错误');
  59. }
  60. }catch(err){// 兄弟节点
  61. codeelem = signElem.previousElementSibling;
  62. }
  63. document.oncopy=function(e){
  64. e.clipboardData.setData('text',codeelem.innerText);
  65. e.preventDefault();
  66. document.oncopy=null;
  67. }
  68. document.execCommand("Copy");// 执行浏览器复制命令
  69. signElem.setAttribute('data-title','复制成功');
  70. signElem.style.cssText += 'background-color: green';
  71. setTimeout(()=>{ // 先延时1000ms,再执行回调函数
  72. signElem.setAttribute('data-title','点击复制');
  73. signElem.style.removeProperty('background-color','green');
  74. },1000);
  75. };
  76. /*
  77. @name 专注模式
  78. @func
  79. modifyFocusPriviledge: 修改专注权限
  80. showFocusModel: 展开专注模式
  81. */
  82. modifyFocusPriviledge(mainBox, main, catalog){
  83. // 修改toolbar
  84. let toolbar = document.querySelector('.csdn-side-toolbar');
  85. let focusSwitch = document.querySelector('.option-box').cloneNode(true);
  86. focusSwitch.firstElementChild.src = 'https://s1.aigei.com/src/img/png/05/055f0df239ef4451a25be1e5c4617f96.png?imageMogr2/auto-'+
  87. 'orient/thumbnail/!199x199r/gravity/Center/crop/199x199/quality/85/&e=1735488000&'+
  88. 'token=P7S2Xpzfz11vAkASLTkfHN7Fw-oOZBecqeJaxypL:pxpJ0L3fOUppABVi15gOFs94eqk=';
  89. focusSwitch.style.background = "rgba(0,0,0,0.1)";
  90. focusSwitch.firstElementChild.style.width = "200%";
  91. focusSwitch.firstElementChild.style.display = "block"; // 去除初始鼠标放上有动态加载事件
  92. focusSwitch.removeChild(focusSwitch.lastElementChild);
  93. toolbar.replaceChildren(focusSwitch);
  94. // 修改默认页面配置样式
  95. main.removeAttribute('id');
  96. focusSwitch.removeAttribute('mouseup');
  97. mainBox.firstElementChild.nextElementSibling.style.removeProperty('z-index');
  98. main.style.cssText += 'z-index:999;position:absolute';
  99. main.style.display = 'none';
  100. if(catalog!=null){
  101. let pn = catalog.parentNode;
  102. let _catalog = catalog.cloneNode(true);
  103. _catalog.style.cssText += 'z-index:999;position:fixed;background-color: rgba(255,255,255,0.2);position: fixed;top: 80px;color: white;right: 20px;';
  104. _catalog.style.setProperty('max-height','454.5px');
  105. _catalog.firstElementChild.style.setProperty('max-height','inherit');
  106. _catalog.firstElementChild.firstElementChild.style.cssText += 'text-align:center;background:black;color:white';
  107. _catalog.style.display = 'none';
  108. _catalog.removeAttribute('id');
  109. let className = (function(){
  110. let arr = [];
  111. for(let i=0;i<3;i++){
  112. if(pn.className.length){
  113. arr.push(pn.className);
  114. }
  115. pn = pn.parentNode;
  116. }
  117. return arr.join(' ')
  118. })();
  119. _catalog.className += ' ' + className;
  120. document.body.insertBefore(_catalog, document.body.firstElementChild);
  121. }
  122. document.body.insertBefore(main, document.body.firstElementChild);
  123. return catalog==null?{a:focusSwitch,b:catalog}:{a: focusSwitch,b: _catalog};
  124.  
  125. };
  126. showFocusModel(status, mainBox, main,catalog){
  127. if(status===0){ // 进入专注模式
  128. console.log(`----${status}: 专注模式----`)
  129. mainBox.style.display = 'none';
  130. mainBox.nextElementSibling.style.display = 'none';
  131. main.style.display = 'block';
  132. if(catalog!=null){
  133. catalog.style.display = 'block';
  134. catalog.setAttribute('id','groupfile');
  135. }
  136. }else{
  137. console.log(`----${status}: 初始模式----`);
  138. mainBox.style.display = 'block';
  139. mainBox.nextElementSibling.style.display = 'block';
  140. main.style.display = 'none';
  141. if(catalog!=null){
  142. catalog.style.display = 'none';
  143. catalog.removeAttribute('id');
  144. }
  145. }
  146. }
  147. };
  148.  
  149. let csdn = new CSDN();
  150. let mainBox = document.getElementById('mainBox');
  151. let main = mainBox.firstElementChild.cloneNode(true);
  152. let catalog = document.getElementById('groupfile');
  153. let compose = csdn.modifyFocusPriviledge(mainBox, main, catalog);
  154. let status = -1;
  155. compose.a.addEventListener('click', function(){
  156. status = ~status;
  157. csdn.showFocusModel(status,mainBox,main,compose.b);
  158. },'true');
  159. let codes = document.querySelectorAll('#content_views pre code');
  160. let signs = document.querySelectorAll('.signin');
  161. // 解决部分文章允许不登陆复制的脚本定位问题
  162. if(signs.length===0) signs = document.querySelectorAll('.hljs-button');
  163. for(var i=0;i<codes.length;i++){
  164. let sign = signs[i];
  165. csdn.modifyCopyPriviledge(codes[i], signs[i]);
  166. sign.addEventListener('click', function(){
  167. csdn.copy(this);
  168. },'true');
  169. };
  170. })();

QingJ © 2025

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