您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
隐藏左右菜单,免关注即可查看全文,支持免登录复制代码。
// ==UserScript== // @name CSDN 增强 // @namespace http://tampermonkey.net/ // @version 0.6 // @description 隐藏左右菜单,免关注即可查看全文,支持免登录复制代码。 // @author WHXRR // @license MIT // @match https://blog.csdn.net/*/article/details/* // @match https://*.blog.csdn.net/article/details/* // @icon https://www.google.com/s2/favicons?sz=64&domain=csdn.net // @grant none // ==/UserScript== (function () { "use strict"; function addGlobalStyle(css) { var head, style; head = document.getElementsByTagName("head")[0]; if (!head) { return; } style = document.createElement("style"); style.type = "text/css"; style.innerHTML = css; head.appendChild(style); } // 1. Inject CSS to hide side menus and expand the main content area addGlobalStyle(` #mainBox .blog_container_aside, #rightAside, #toolBarBox, #csdn-toolbar, .passport-login-container { display: none !important; } #mainBox { width: 100% !important; } .nodata .container main { width: 100% !important; } .nodata .container { margin-right: 0 !important; } body #mainBox { width: 100% !important; } /* Enable text selection */ body, body * { user-select: auto !important; } `); // 2. Remove copy/selection restrictions document.querySelectorAll("*").forEach((item) => { item.oncopy = function (e) { e.stopPropagation(); }; }); const handleDynamicContent = () => { // Expand elements that have inline styles const articleContent = document.querySelector("#article_content"); const hideArticleBox = document.querySelector(".hide-article-box"); if (articleContent && articleContent.style.height !== "auto") { articleContent.style.height = "auto"; } if (hideArticleBox && hideArticleBox.style.display !== "none") { hideArticleBox.style.display = "none"; } // 3. Override "Login to Copy" buttons const copyButtons = document.querySelectorAll("div.hljs-button.signin"); copyButtons.forEach((button) => { if (button.dataset.copyListenerAdded) { return; // Skip if listener is already attached } // Remove login functionality button.removeAttribute("onclick"); button.dataset.title = "复制代码"; button.classList.remove("signin"); // Add direct copy functionality button.addEventListener("click", (event) => { event.stopPropagation(); const pre = button.closest("pre"); if (!pre) return; const code = pre.querySelector("code"); if (!code) return; navigator.clipboard .writeText(code.innerText) .then(() => { button.dataset.title = "已复制!"; setTimeout(() => { button.dataset.title = "复制代码"; }, 2000); }) .catch((err) => { console.error("Failed to copy code: ", err); button.dataset.title = "复制失败"; setTimeout(() => { button.dataset.title = "复制代码"; }, 2000); }); }); button.dataset.copyListenerAdded = "true"; }); }; // Use MutationObserver to handle all dynamically loaded content const observer = new MutationObserver(handleDynamicContent); observer.observe(document.body, { childList: true, subtree: true, }); // Initial run to catch already present elements handleDynamicContent(); })();