// ==UserScript== // @name 知乎一键转载 // @namespace http://tampermonkey.net/ // @version 0.2 // @description 知乎回答一键复制,转载! // @author NXD // @match https://www.zhihu.com/question/* // @grant GM_addStyle // @downloadURL none // ==/UserScript== // Question-sideColumn 隐藏右边栏 GM_addStyle('.Question-sideColumn {display: none !important}'); // 回答界面加宽 GM_addStyle('.Question-mainColumn {width: 1000px !important}'); (function() { 'use strict'; function createElement(eleName, text, attrs){ let ele = document.createElement(eleName); ele.innerText = text; for(let k in attrs){ ele.setAttribute(k, attrs[k]); } return ele; } // 复制到剪贴板函数 function addToClipboard(text){ navigator.clipboard.writeText(text).then(function() { // 一切都没问题的话会执行 alert 操作 alert('succeed copy'); }, function(err) { // 失败时执行的函数 console.info('failed copy', err); alert('faild copy') }); } // added 是一个全局变量, 用来保存已经添加过按钮的节点. let added = []; // 按钮样式 let btnStyle = 'background-color: #0084ff; position: absolute; top: 10px; left: 400px; cursor:pointer; color: #fff; border-radius: 3px; border: 1px solid; padding: 3px 6px'; // 第一个回答 Card AnswerCard function addFirstBtn(){ // 获得第一个回答 let first = document.querySelector("#root > div > main > div > div.Question-main > div.ListShortcut > div > div.Card.AnswerCard"); // 获取每个回答的头部信息位置 let meta = first.querySelector('div[class="ContentItem-meta"]'); GM_addStyle('.ContentItem-meta{position: relative;}'); // https://www.zhihu.com/question/398927155/answer/1266562835 获取到网址拿到最后的answer Id let who = meta.querySelector('meta[itemprop="url"]').getAttribute('content').split('/').pop(); // 添加过的不再添加 if(added.indexOf(who) === -1){ // 没添加的插入数组 added.push(who); // 创建按钮 let btn = createElement('buton', '转载按钮', {style: btnStyle}); // 获取文章内容 let text = first.querySelector('div[class="RichContent-inner"]').innerText; // 将文章内容复制到剪贴板 btn.addEventListener('click', ()=>{addToClipboard(text)}); meta.append(btn); } } // 更多回答:Card MoreAnswers function addBtn(){ // 获得所有回答:第一个回答 let first = document.querySelector("#root > div > main > div > div.Question-main > div.ListShortcut > div > div.Card.AnswerCard"); // 更多回答 let all = document.querySelectorAll('div[class="List-item"]'); for(let item of all){ // 获取每个回答的头部信息位置 let meta = item.querySelector('div[class="ContentItem-meta"]'); GM_addStyle('.ContentItem-meta{position: relative;}'); // https://www.zhihu.com/question/398927155/answer/1266562835 获取到网址拿到最后的answer Id let who = meta.querySelector('meta[itemprop="url"]').getAttribute('content').split('/').pop(); // 添加过的不再添加 if(added.indexOf(who) !== -1){ continue; } // 没添加的插入数组 added.push(who); // 创建按钮 let btn = createElement('buton', '转载按钮', {style: btnStyle}); // 获取文章内容 let text = item.querySelector('div[class="RichContent-inner"]').innerText; // 将文章内容复制到剪贴板 btn.addEventListener('click', ()=>{addToClipboard(text)}); meta.append(btn); } } // 加载出来的先调用这个 window.addEventListener('load', addFirstBtn); // 没加载出来的随着滚动条调用 window.addEventListener('scroll', addBtn); })();