// ==UserScript== // @name CSDN文章页美化 // @namespace https://github.com/custom/csdn-clean // @version 6.4.0 // @description CSDN文章页美化:代码自动展开、一键复制 // @tag CSDN 页面美化 // @author deran // @match *://blog.csdn.net/*/article/details/* // @grant GM_addStyle // @run-at document-idle // @license MIT // ==/UserScript== (function () { 'use strict'; try { /* ========== 1. 全量样式一次性注入(仅文章页生效) ========== */ GM_addStyle(` /* ===== 浅色护眼主题 ===== */ html, body, .main_father, #mainBox, .container, .blog-content-box, .article-header, .comment-box, .comment-container, #pcCommentBox, .nodata, .main-content, .article-info-box, .blog-footer-bottom, .recommend-box, aside.blog_container_aside, .aside-box { background-color: #e6e9ef !important; background-image: none !important; } p, h1, h2, h3, h4, h5, h6, li, dd, dt, blockquote, cite, table, tr, td, th, thead, tbody, label, legend, caption { color: #4c4f69 !important; } ::selection { background-color: #acb0be !important; } ::-moz-selection { background-color: #acb0be !important; } a, a:link, a:visited { color: #1e66f5 !important; text-decoration: none; } a:hover, a:active { text-decoration: underline; } input, textarea, select, button { background-color: #ffffff !important; color: #4c4f69 !important; border: 1px solid #d0d4dc !important; outline: none; } input:focus, textarea:focus, select:focus { border-color: #1e66f5 !important; } img, video, svg, canvas, emoji, [class*="icon"], [class*="logo"], [style*="background-image"] { background-color: transparent !important; filter: none !important; } /* ===== 全局广告屏蔽 ===== */ .dmp_ad, [class*="dmp-ad"], [id*="dmp_ad"], [class^="floor-ad_"], .floor-ad-box, .adsbygoogle, .article-ad-box, [data-report-click*="ad"], .csdn-common-ad, .popup-ad, .pop-ad-box, #csdn-plugin-vip, #csdn-toolbar .toolbar-btn a[href*="mall.csdn.net/vip"]>img, .aside-dmp-ad, .blog_container_aside .dmp_ad, .csdn-side-toolbar .ad-entry, .aside-box[data-type="ad"], .csdn-side-toolbar .sidecolumn-vip, #sidecolumn-deepseek, .recommend-item-box.ad-item, .recommend-box .ad-card, #recommendAdBox, .passport-login-tip-container, .csdn-reapck-select, .ins-code-runner-btn, .blind_box, #csdn-redpack, .luck-draw-modal-warp, .guide-rr-first, .csdn-toolbar-creative-mp, .write-guide-buttom-box, .tool-active-list, .activity-swiper-box, .sidetool-writeguide-box .tip-box, .page-container .top-bar, .page-container .fix-bottom-bar, .page-container .btn .ml-12, .siderbar-box, .user-desc { display: none !important; height: 0 !important; margin: 0 !important; padding: 0 !important; overflow: hidden !important; visibility: hidden !important; opacity: 0 !important; pointer-events: none !important; } /* ===== 登录弹窗拦截 + 滚动永久解锁 ===== */ .login-mark, .login-box, .passport-login-container, .csdn-login-layer, .login-modal, .passport-login-mark { display: none !important; } html, body { overflow: auto !important; width: auto !important; } /* ===== 内容解锁:全文 + 代码块高度展开 ===== */ .article_content, #article_content, .user-article.user-article-hide, .main-content .user-article, .cont.first-show.forbid { height: auto !important; max-height: none !important; overflow: visible !important; } .hide-article-box, .read-more-box, .article-show-more, .open, .hide-preCode-box { display: none !important; } pre.set-code-hide, #content_views pre, .blog-content-box pre { max-height: none !important; height: auto !important; } /* ===== 全文居中布局 ===== */ .main_father { justify-content: center !important; } #mainBox main { width: inherit !important; } aside.blog_container_aside, #rightAside, #rightAsideConcision { display: none !important; } #mainBox { margin-left: 0 !important; margin-right: 0 !important; padding-right: 0 !important; } @media (min-width: 1200px) { .nodata .container, .nodata .container main { width: 900px !important; } } @media (min-width: 1600px) { .nodata .container, .nodata .container main { width: 1080px !important; } } .toolbar-wrapper, .page-home-right { display: none !important; } .article-detail { margin: 0 auto !important; } /* ===== 解除文字选中限制 ===== */ #content_views, #content_views pre, #content_views pre code, .forbid, .user-article { -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important; -webkit-touch-callout: text !important; } /* ===== 移除顶部导航栏 ===== */ #csdn-toolbar, .csdn-toolbar, .toolbar-container, .csdn-header-box, .csdn-nav-box, .page-header { display: none !important; height: 0 !important; min-height: 0 !important; } html, body { padding-top: 0 !important; margin-top: 0 !important; } .main_father, #mainBox, .page-container { margin-top: 0 !important; padding-top: 20px !important; } /* ===== 右侧悬浮工具栏 ===== */ .csdn-side-toolbar { top: 20px !important; display: block !important; } .csdn-side-toolbar .option-box[data-type="service"], .csdn-side-toolbar .service-btn, .online-service, .cs-customer-service, .customer-service-float, .service-panel { display: none !important; } /* ===== 评论区优化 ===== */ .comment-list, .comment-container, .comment-list-box, #pcCommentBox, #comment .comment-list { max-height: none !important; height: auto !important; overflow: visible !important; } .look-more-comment, .btn-more-comment, .load-more-comment, .more-comment-btn { display: none !important; } .comment-login-tip, .login-tip-box, .comment-box .unlogin-tip, .comment-editor-login-mask { display: none !important; } .comment-ad-box, .comment-list .ad-item, .comment-app-tip, .open-app-btn { display: none !important; } .comment-item .report-btn, .comment-item .share-btn { display: none !important; } #pcCommentBox, .comment-box, .comment-container, #comment { width: 100% !important; max-width: 100% !important; margin: 0 auto !important; padding: 0 !important; } `); // CSDN复制监听绑定在冒泡阶段,我们在捕获阶段掐断事件传播 // 捕获阶段(Capture):从最顶层 document → html → body → 逐层向下遍历到你点击 / 选中的目标元素; // 目标阶段(Target):到达真正触发事件的 DOM 元素(你选中文字所在的 div/pre); // 冒泡阶段(Bubble):从目标元素反向逐层向上,回到 document。 document.addEventListener('copy', e => { e.stopImmediatePropagation(); }, true); document.querySelectorAll(".hljs-button.signin").forEach((btn) => { btn.setAttribute("data-title", "复制"); btn.onclick = function (e) { e.stopPropagation(); navigator.clipboard .writeText(this.closest("pre, .code-box").querySelector('code').innerText) .then(() => {this.setAttribute("data-title", "复制成功"); setTimeout(() => this.setAttribute("data-title", "复制"), 2000);}) .catch(err => { this.setAttribute("data-title", "复制失败"); setTimeout(() => this.setAttribute("data-title", "复制"), 2000);}); }; }); } catch (err) { console.error('[CSDN文章美化] 脚本运行异常:', err); } })();