您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
知乎代码高亮
// ==UserScript== // @name zhihu one // @version 0.1.4 // @description 知乎代码高亮 // @author Limboer // @match *://*.zhihu.com/* // @resource darkCSS https://gitee.com/limboer/zhihu-highlight/raw/master/dark.css // @resource lightCSS https://gitee.com/limboer/zhihu-highlight/raw/master/light.css // @grant GM_addStyle // @grant GM_getResourceText // @namespace https://gf.qytechs.cn/users/443935 // ==/UserScript== (function() { const createDOMFromString = (html) => { const div = document.createElement('div') div.insertAdjacentHTML('beforeend', html) return div } const mount = (component, root, position='beforeend') => { root.insertAdjacentElement(position, component.renderDOM()) component.onStateChange = (oldEl, newEl) => { root.insertAdjacentElement(position, newEl) root.removeChild(oldEl) } } class Component { constructor(props={}) { this.props = props this.el = null this.state = {} } onStateChange(oldEl, newEl) { console.log('state changed') } setState(newState) { const oldEl = this.el this.state = newState this.el = this.renderDOM() this.onStateChange(oldEl, this.el) } handleClick() { console.log('clicked') } render() { return '<div></div>' } renderDOM() { this.el = createDOMFromString(this.render()) this.el.addEventListener('click', e => this.handleClick(e), false) return this.el } } class ThemeToogleButton extends Component { constructor(props) { super(props) this.state = { theme: document.querySelector('html').getAttribute('data-theme') || 'light' } this.toogleTheme() console.log('state', this.state) } toogleTheme() { const darkMode = GM_getResourceText("darkCSS") const lightMode = GM_getResourceText("lightCSS") if (this.state.theme === 'dark') { GM_addStyle(darkMode) } else { GM_addStyle(lightMode) } // 发送改变主题的请求, 在用户下一次刷新页面的时候更新该 url 下的主题 fetch(`/?theme=${this.state.theme}`) .then(res => document.querySelector('html').setAttribute('data-theme', this.state.theme)) .catch(error => console.error('error', error)) } handleClick(e) { this.setState({ theme: this.state.theme === 'light' ? 'dark' : 'light' }) this.toogleTheme() } render() { return ` <div class="CornerAnimayedFlex"> <button data-tooltip=${this.state.theme === "dark" ? "日常模式" : "黑暗模式"} data-tooltip-position="left" type="button" class="Button CornerButton Button--plain" > ${this.state.theme === "dark" ? "Light" : "Dark"} </button> </div> ` } } const root = document.querySelector('.CornerButtons') const themeToogleButton = new ThemeToogleButton() mount(themeToogleButton, root, 'afterbegin') })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址