// ==UserScript== // @name CSDN助手 // @namespace http://tampermonkey.net/ // @version 0.41 // @description CSDN未登录复制、复制代码不带原文链接、禁用登录弹窗、未登录查看所有评论、评论完全展开 // @author Gandalf_jiajun // @include https://blog.csdn.net/* // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== // @grant none // @note 2022.01.28 更新禁用提示登录弹窗。 // @note 2022.01.29 更新评论区子项显示及自动展开。 // @note 2022.01.30 V0.21 更新评论区表情包显示异常。 // @note 2022.01.31 V0.22 修复评论区样式显示异常问题。 // @note 2022.02.15 V0.31 破解阅读文章必须关注作者功能。 // @note 2022.03.01 v0.40 随机cookie欺骗。伪造登录屏蔽弹窗。 // @note 2022.03.06 v0.41 删除随机cookie欺骗。优化伪造hide_login cookie登录屏蔽弹窗。修复bug。 //觉得本脚本还可以的可以给个好评,觉得有问题的可以留言,谢谢各位! // @downloadURL https://update.greasyfork.icu/scripts/439112/CSDN%E5%8A%A9%E6%89%8B.user.js // @updateURL https://update.greasyfork.icu/scripts/439112/CSDN%E5%8A%A9%E6%89%8B.meta.js // ==/UserScript== (function() { 'use strict'; const appendStyle = (tagArr) => { tagArr.forEach(element => { element.style.userSelect = 'text'; element.style.webkitUserSelect = 'text'; }); }; const translateParams = (params) => { let str = '?'; for(let i in params) { str += i + '=' + params[i] + '&'; } return str.substring(0, str.length - 1); }; const request = (method, url, params) => { return new Promise((resolve, reject) => { let newUrl = params ? url + translateParams(params) : url; const xml = new XMLHttpRequest; xml.open(method, newUrl, true); xml.send(); xml.onreadystatechange = () => { if(xml.readyState == 4 && xml.status == 200) { resolve(JSON.parse(xml.responseText)); } }; }) }; let tag_a = document.querySelectorAll('#content_views pre'); let tag_b = document.querySelectorAll('#content_views pre code'); let domMask = document.querySelector('.hide-article-box') || null; // console.log(tag_a, tag_b); appendStyle(tag_a); appendStyle(tag_b); const getCompleteDom = () => { if (domMask) { let completeDom = document.querySelectorAll('#article_content')[0]; completeDom.style.height = "inherit"; completeDom.style.overflow = "auto"; domMask.innerHTML = ""; domMask.style.display = "none"; } }; // 替换表情包 const replaceDoge = (str) => { // [face]emoji:062.png[/face] return str.replace(/\[face\]([^\]]+):([^\[]+)\[\/face\]/g, `表情包`) }; const replaceComment = (str) => { let newCom; newCom = replaceDoge(str); return newCom; }; // 生成子项dom const createSubDom = (arr) => { let dom = `
  • `; return dom; }; // 生成dom const createDom = (arr) => { let dom = `
    `; //
    arr.forEach((v, i) => { let commentDom = ``; dom += commentDom; }) dom += ``; return dom; }; // 获取评论 const getComment = async () => { try { let articalId = window.location.href.split('/article/details/')[1].split('?')[0]; let commentUrl = '/phoenix/web/v1/comment/list/' + articalId; let params = { page: 1, size: 999, fold: 'unfold', commentId: '' }; const res = await request('post', commentUrl, params); let dom = createDom(res.data.list); let parentNode = document.getElementsByClassName('comment-list-container')[0]; let parentNode_chrome = document.getElementsByClassName('unlogin-comment-box-new')[0]; if (parentNode_chrome && window.navigator.userAgent.indexOf('Chrome')) { // 判断是否为谷歌浏览器 parentNode_chrome.innerHTML = `
    评论${res.data.count}
    ` + dom; } else { parentNode.innerHTML = dom; } } catch(err) { console.log(err); } }; const setCookie = (key, value, path, domain) => { const time = 4 * 30 * 24 * 60 * 60 * 1000; const date = new Date(+new Date + time).toUTCString(); document.cookie = `${key}=${value};path=${path};domain=${domain};expires=${date}` } const setHideLogin = () => { const cookieArr = document.cookie.split('; '); if (cookieArr.includes("hide_login=2")) { return } else { setCookie('hide_login', 2, '/', '.csdn.net') location.href = location.href } } setTimeout(() => { getCompleteDom(); getComment(); window.csdn ? window.csdn.copyright.init('', '') : ''; window.csdn.loginBox.show = function() {}; setHideLogin(); }, 0); })();