您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
一键调用打印功能,适用于所有页面,打印前隐藏特定元素(VPSidebar, VPLocalNav has-sidebar, .container > aside, VPDocFooter)并修改VPContent的padding,找不到元素时继续执行并将错误打印到控制台,增加打印预览功能
// ==UserScript== // @name vitePress页面打印 // @namespace http://tampermonkey.net/ // @version 1.0 // @description 一键调用打印功能,适用于所有页面,打印前隐藏特定元素(VPSidebar, VPLocalNav has-sidebar, .container > aside, VPDocFooter)并修改VPContent的padding,找不到元素时继续执行并将错误打印到控制台,增加打印预览功能 // @author lengsukq // @match *://*/* // @grant GM_registerMenuCommand // @grant GM_getValue // @grant GM_setValue // ==/UserScript== (function() { 'use strict'; let isPreview = GM_getValue('isPreview', false); // 初始状态从GM_getValue中读取,默认为false function togglePrintPreview() { isPreview = !isPreview; // 切换预览状态 GM_setValue('isPreview', isPreview); // 保存预览状态 // 获取元素 const sidebar = document.querySelector('.VPSidebar'); const nav = document.querySelector('.VPNav'); const containerAside = document.querySelector('.container > aside'); // 精确选择 .container 下面的 .aside const prevNext = document.querySelector('.prev-next'); const vpContent = document.getElementById('VPContent'); const vpLocalNav = document.querySelector('.VPLocalNav.has-sidebar'); const vpDocFooter = document.querySelector('.VPDocFooter'); // 获取 VPDocFooter 元素 // 保存原始样式 const originalStyle = { sidebar: sidebar ? sidebar.style.display : null, nav: nav ? nav.style.display : null, containerAside: containerAside ? containerAside.style.display : null, prevNext: prevNext ? prevNext.style.display : null, vpContentPadding: vpContent ? vpContent.style.padding : null, vpLocalNavDisplay: vpLocalNav ? vpLocalNav.style.display : null, vpDocFooter: vpDocFooter ? vpDocFooter.style.display : null // 保存 VPDocFooter 的原始 display 样式 }; // 根据预览状态,显示或隐藏元素,并修改VPContent的padding if (isPreview) { // 隐藏元素 try { sidebar && (sidebar.style.display = 'none'); } catch (error) { console.error('vitePress 打印脚本:隐藏 sidebar 元素时出错', error); } try { nav && (nav.style.display = 'none'); } catch (error) { console.error('vitePress 打印脚本:隐藏 nav 元素时出错', error); } try { containerAside && (containerAside.style.display = 'none'); // 隐藏 .container > aside } catch (error) { console.error('vitePress 打印脚本:隐藏 .container > aside 元素时出错', error); } try { prevNext && (prevNext.style.display = 'none'); } catch (error) { console.error('vitePress 打印脚本:隐藏 prevNext 元素时出错', error); } try { vpLocalNav && (vpLocalNav.style.display = 'none'); } catch (error) { console.error('vitePress 打印脚本:隐藏 VPLocalNav 元素时出错', error); } try { vpDocFooter && (vpDocFooter.style.display = 'none'); // 隐藏 VPDocFooter 元素 } catch (error) { console.error('vitePress 打印脚本:隐藏 VPDocFooter 元素时出错', error); } // 修改 VPContent 的 padding try { vpContent && (vpContent.style.padding = '0'); } catch (error) { console.error('vitePress 打印脚本:修改 VPContent 的 padding 时出错', error); } } else { // 恢复显示和 padding try { sidebar && (sidebar.style.display = originalStyle.sidebar || ''); } catch (error) { console.error('vitePress 打印脚本:恢复 sidebar 元素显示时出错', error); } try { nav && (nav.style.display = originalStyle.nav || ''); } catch (error) { console.error('vitePress 打印脚本:恢复 nav 元素显示时出错', error); } try { containerAside && (containerAside.style.display = originalStyle.containerAside || ''); // 恢复 .container > aside } catch (error) { console.error('vitePress 打印脚本:恢复 .container > aside 元素显示时出错', error); } try { prevNext && (prevNext.style.display = originalStyle.prevNext || ''); } catch (error) { console.error('vitePress 打印脚本:恢复 prevNext 元素显示时出错', error); } try { vpLocalNav && (vpLocalNav.style.display = originalStyle.vpLocalNavDisplay || ''); } catch (error) { console.error('vitePress 打印脚本:恢复 VPLocalNav 元素显示时出错', error); } try { vpDocFooter && (vpDocFooter.style.display = originalStyle.vpDocFooter || ''); // 恢复 VPDocFooter 元素的显示 } catch (error) { console.error('vitePress 打印脚本:恢复 VPDocFooter 元素显示时出错', error); } try { vpContent && (vpContent.style.padding = originalStyle.vpContentPadding || ''); } catch (error) { console.error('vitePress 打印脚本:恢复 VPContent 的 padding 时出错', error); } } } function printPage() { // 获取元素 const sidebar = document.querySelector('.VPSidebar'); const nav = document.querySelector('.VPNav'); const containerAside = document.querySelector('.container > aside'); // 精确选择 .container 下面的 .aside const prevNext = document.querySelector('.prev-next'); const vpContent = document.getElementById('VPContent'); const vpLocalNav = document.querySelector('.VPLocalNav.has-sidebar'); const vpDocFooter = document.querySelector('.VPDocFooter'); // 获取 VPDocFooter 元素 // 保存原始样式 const originalStyle = { sidebar: sidebar ? sidebar.style.display : null, nav: nav ? nav.style.display : null, containerAside: containerAside ? containerAside.style.display : null, prevNext: prevNext ? prevNext.style.display : null, vpContentPadding: vpContent ? vpContent.style.padding : null, vpLocalNavDisplay: vpLocalNav ? vpLocalNav.style.display : null, vpDocFooter: vpDocFooter ? vpDocFooter.style.display : null // 保存 VPDocFooter 的原始 display 样式 }; // 隐藏元素 try { sidebar && (sidebar.style.display = 'none'); } catch (error) { console.error('vitePress 打印脚本:隐藏 sidebar 元素时出错', error); } try { nav && (nav.style.display = 'none'); } catch (error) { console.error('vitePress 打印脚本:隐藏 nav 元素时出错', error); } try { containerAside && (containerAside.style.display = 'none'); // 隐藏 .container > aside } catch (error) { console.error('vitePress 打印脚本:隐藏 .container > aside 元素时出错', error); } try { prevNext && (prevNext.style.display = 'none'); } catch (error) { console.error('vitePress 打印脚本:隐藏 prevNext 元素时出错', error); } try { vpLocalNav && (vpLocalNav.style.display = 'none'); } catch (error) { console.error('vitePress 打印脚本:隐藏 VPLocalNav 元素时出错', error); } try { vpDocFooter && (vpDocFooter.style.display = 'none'); // 隐藏 VPDocFooter 元素 } catch (error) { console.error('vitePress 打印脚本:隐藏 VPDocFooter 元素时出错', error); } // 修改 VPContent 的 padding try { vpContent && (vpContent.style.padding = '0'); } catch (error) { console.error('vitePress 打印脚本:修改 VPContent 的 padding 时出错', error); } // 打印 window.print(); // 恢复显示和 padding try { sidebar && (sidebar.style.display = originalStyle.sidebar || ''); } catch (error) { console.error('vitePress 打印脚本:恢复 sidebar 元素显示时出错', error); } try { nav && (nav.style.display = originalStyle.nav || ''); } catch (error) { console.error('vitePress 打印脚本:恢复 nav 元素显示时出错', error); } try { containerAside && (containerAside.style.display = originalStyle.containerAside || ''); // 恢复 .container > aside } catch (error) { console.error('vitePress 打印脚本:恢复 .container > aside 元素显示时出错', error); } try { prevNext && (prevNext.style.display = originalStyle.prevNext || ''); } catch (error) { console.error('vitePress 打印脚本:恢复 prevNext 元素显示时出错', error); } try { vpLocalNav && (vpLocalNav.style.display = originalStyle.vpLocalNavDisplay || ''); } catch (error) { console.error('vitePress 打印脚本:恢复 VPLocalNav 元素显示时出错', error); } try { vpDocFooter && (vpDocFooter.style.display = originalStyle.vpDocFooter || ''); // 恢复 VPDocFooter 元素的显示 } catch (error) { console.error('vitePress 打印脚本:恢复 VPDocFooter 元素显示时出错', error); } try { vpContent && (vpContent.style.padding = originalStyle.vpContentPadding || ''); } catch (error) { console.error('vitePress 打印脚本:恢复 VPContent 的 padding 时出错', error); } } GM_registerMenuCommand("切换打印预览", togglePrintPreview); GM_registerMenuCommand("打印页面", printPage); })();