知乎一键转载

模仿又拍云 demo 实现并修改的知乎一件转载,可以一键复制到剪贴板!隐藏知乎右边侧栏,加宽回答可视区域,使您阅读的更加舒服!欢迎食用!

  1. // ==UserScript==
  2. // @name 知乎一键转载
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.5
  5. // @description 模仿又拍云 demo 实现并修改的知乎一件转载,可以一键复制到剪贴板!隐藏知乎右边侧栏,加宽回答可视区域,使您阅读的更加舒服!欢迎食用!
  6. // @author NXD
  7. // @match https://www.zhihu.com/question/*
  8. // @grant GM_addStyle
  9. // ==/UserScript==
  10.  
  11. // Question-sideColumn 隐藏右边栏
  12. GM_addStyle('.Question-sideColumn {display: none !important}');
  13. // 回答界面加宽
  14. GM_addStyle('.Question-mainColumn {width: 1000px !important}');
  15.  
  16. (function() {
  17. 'use strict';
  18. function createElement(eleName, text, attrs){
  19. let ele = document.createElement(eleName);
  20. ele.innerText = text;
  21. for(let k in attrs){
  22. ele.setAttribute(k, attrs[k]);
  23. }
  24. return ele;
  25. }
  26. // 复制到剪贴板函数
  27. function addToClipboard(text){
  28. navigator.clipboard.writeText(text).then(function() {
  29. // 一切都没问题的话会执行 alert 操作
  30. alert('succeed copy');
  31. }, function(err) {
  32. // 失败时执行的函数
  33. console.info('failed copy', err);
  34. alert('faild copy')
  35. });
  36. }
  37. // added 是一个全局变量, 用来保存已经添加过按钮的节点.
  38. let added = [];
  39. // 按钮样式
  40. let btnStyle = 'background-color: #0084ff; margin-top: 15px; margin-bottom: 15px; margin-left:-5px; cursor:pointer; color: #fff; border-radius: 3px; border: 1px solid; padding: 3px 6px';
  41. // 第一个回答 Card AnswerCard
  42. function addFirstBtn(){
  43. // 获得第一个回答
  44. let first = document.querySelector("#root > div > main > div > div.Question-main > div.ListShortcut > div > div.Card.AnswerCard");
  45. // 获取每个回答的头部信息位置
  46. let meta = first.querySelector('div[class="ContentItem-meta"]');
  47. GM_addStyle('.ContentItem-meta{position: relative;}');
  48. // https://www.zhihu.com/question/398927155/answer/1266562835 获取到网址拿到最后的answer Id
  49. let who = meta.querySelector('meta[itemprop="url"]').getAttribute('content').split('/').pop();
  50. // 添加过的不再添加
  51. if(added.indexOf(who) === -1){
  52. // 没添加的插入数组
  53. added.push(who);
  54. // 创建按钮
  55. let btn = createElement('button', '转载按钮', {style: btnStyle});
  56. // 获取文章内容
  57. let text = first.querySelector('div[class="RichContent-inner"]').innerText;
  58. // 将文章内容复制到剪贴板
  59. btn.addEventListener('click', ()=>{addToClipboard(text)});
  60. meta.append(btn);
  61. }
  62. }
  63. // 更多回答:Card MoreAnswers
  64. function addBtn(){
  65. // 更多回答
  66. let all = document.querySelectorAll('div[class="List-item"]');
  67. for(let item of all){
  68. // 获取每个回答的头部信息位置
  69. let meta = item.querySelector('div[class="ContentItem-meta"]');
  70. GM_addStyle('.ContentItem-meta{position: relative;}');
  71. // https://www.zhihu.com/question/398927155/answer/1266562835 获取到网址拿到最后的answer Id
  72. let who = meta.querySelector('meta[itemprop="url"]').getAttribute('content').split('/').pop();
  73. // 添加过的不再添加
  74. if(added.indexOf(who) !== -1){
  75. continue;
  76. }
  77. // 没添加的插入数组
  78. added.push(who);
  79. // 创建按钮
  80. // let btn = createElement('buton', '转载按钮', {style: btnStyle});
  81. // ...buton写错,终于发现问题了。。
  82. let btn = createElement('button', '转载按钮', {style: btnStyle});
  83. // 获取文章内容
  84. let text = item.querySelector('div[class="RichContent-inner"]').innerText;
  85. // 将文章内容复制到剪贴板
  86. btn.addEventListener('click', ()=>{addToClipboard(text)});
  87. meta.append(btn);
  88. }
  89. }
  90. // 点击查看全部回答调用addBtn
  91. // 点击后
  92. window.addEventListener('load', addBtn);
  93. // 点击前
  94. // 1. 加载完调用 处理第一个回答
  95. window.addEventListener('load', addFirstBtn);
  96. // 2. 随着滚动条调用后续方法
  97. window.addEventListener('scroll', addBtn);
  98. })();
  99.  
  100.  
  101.  

QingJ © 2025

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