您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
隐藏左右菜单,免关注即可查看全文,支持免登录复制代码。
当前为
// ==UserScript== // @name CSDN 增强 // @namespace http://tampermonkey.net/ // @version 0.4 // @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; } `); const handleDynamicContent = () => { // 2. 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(); })();