Greasy Fork is available in English.
优化阅读界面,免登录,广告去除,黑名单功能.
- // ==UserScript==
- // @name 极简知乎
- // @version 0.1.34
- // @author hceasy
- // @namespace https://hceasy.com
- // @supportURL https://github.com/hceasy/simpleZhiHu/issues
- // @description 优化阅读界面,免登录,广告去除,黑名单功能.
- // @match *://www.zhihu.com/question/*
- // @match *://www2.zhihu.com/question/*
- // @match *://www.zhihu.com/search*
- // @match *://www.zhihu.com/hot
- // @match *://www.zhihu.com/follow
- // @match *://www.zhihu.com/
- // @match *://zhuanlan.zhihu.com/*
- // @match *://www.zhihu.com/signin*
- // @run-at document-end
- // ==/UserScript==
- ; (function () {
- 'use strict'
- // 设置菜单
- const menuHTML = `<div class="extMenu"><img src="https://zhstatic.zhihu.com/assets/error/liukanshan_wire.svg" alt="刘看山" width="15px" height="19px"><p>显示提问标题栏 <input id="showQuestion" type="checkbox"></p><p>浏览器标题替换 <input id="showFakeTitle" type="checkbox"></p><p>页面宽度(694px/80%) <input id="pageWidth" type="text"></p><p>黑名单列表:</p><p><textarea placeholder="刘看山,匿名用户" id="blackList" cols="20" rows="2"></textarea></p><p><button id="saveConfig">保存</button></p></div>`
- const menuCss = `.extMenu {position: fixed;top: 10px;right: 10px;width: 15px;height: 19px;font-size: 12px;overflow: hidden;}.extMenu:hover {width: auto;height: auto;border: 1px solid #000;padding:10px;}.extMenu:hover img {display: none;}`
- const blinkLiu = `.extMenu{animation:jumpLiu 5s infinite}@keyframes jumpLiu{0%{right:10px;background-color:#264653}20%{right:20px;background-color:#2a9d8f}40%{right:30px;background-color:#e9c46a}60%{right:10px;background-color:#f4a261}80%{right:20px;background-color:#e76f51}100%{right:10px;background-color:#264653}}`
- // 区分搜索问答页面
- const pathName = window.location.pathname
- const hostName = window.location.hostname
- let pageType
- if (pathName.indexOf('question') >= 0) {
- pageType = 'question'
- } else if (pathName.indexOf('search') >= 0) {
- pageType = 'search'
- } else if (pathName.indexOf('hot') >= 0 || pathName.indexOf('follow') >= 0 || window.location.href === "https://www.zhihu.com/") {
- pageType = 'hot'
- } else if (pathName.indexOf('signin') >= 0) {
- pageType = 'signin'
- } else if (hostName === "zhuanlan.zhihu.com") {
- pageType = 'zhuanlan'
- }
- // 用GitHub的图标替换
- const fake_title = 'GitHub'
- // icon也改了
- const fake_icon = 'https://github.githubassets.com/favicon.ico'
- let link =
- document.querySelector("link[rel*='icon']") ||
- document.createElement('link')
- window.onload = function () {
- const sConfig = window.localStorage
- if (sConfig.fakeTitle === undefined || sConfig.showQuestion === undefined || sConfig.blackList === undefined || sConfig.pageWidth === undefined) {
- sConfig.fakeTitle = 'true'
- sConfig.showQuestion = 'true'
- sConfig.blackList = ''
- sConfig.pageWidth = '694px'
- }
- // 不登陆不让滚动
- let modelsNum = 0
- let fixTimer = setInterval(() => {
- const mainHtml = document.getElementsByTagName('html')[0]
- if (mainHtml.style.overflow === 'hidden') {
- mainHtml.style.overflow = ''
- }
- }, 200);
- // 添加菜单
- let cssFix = document.createElement('style')
- cssFix.innerHTML += menuCss
- if (typeof (sConfig.blinkLiu) === 'undefined') {
- cssFix.innerHTML += blinkLiu
- }
- document.getElementsByTagName('head')[0].appendChild(cssFix)
- let htmlFix = document.createElement('div')
- htmlFix.innerHTML += menuHTML
- document.body.appendChild(htmlFix)
- // 绑定操作
- document.getElementById('showFakeTitle').checked = JSON.parse(sConfig.fakeTitle)
- document.getElementById('showQuestion').checked = JSON.parse(sConfig.showQuestion)
- document.getElementById('blackList').value = sConfig.blackList
- document.getElementById('pageWidth').value = sConfig.pageWidth
- document.getElementById('saveConfig').addEventListener('click', function () {
- sConfig.fakeTitle = document.getElementById('showFakeTitle').checked
- sConfig.showQuestion = document.getElementById('showQuestion').checked
- sConfig.blackList = document.getElementById('blackList').value.split(',')
- sConfig.pageWidth = document.getElementById('pageWidth').value
- sConfig.blinkLiu = false
- window.location.reload()
- })
- // 改下标题
- if (sConfig.fakeTitle === 'true') {
- window.document.title = fake_title
- link.type = 'image/x-icon'
- link.rel = 'shortcut icon'
- link.href = fake_icon
- document.getElementsByTagName('head')[0].appendChild(link)
- }
- switch (pageType) {
- case 'question':
- fixQuestionPage()
- fixPageWidth()
- break
- case 'search':
- fixSearchPage()
- break
- case 'hot':
- fixHomePage()
- break
- case 'signin':
- addHotList()
- break
- case 'zhuanlan':
- fixZhuanLan()
- break
- }
- hideAuthor()
- }
- window.onscroll = function () {
- hideAuthor()
- }
- function addHotList () {
- let signButton = document.querySelector('.SignFlow-submitButton')
- if (signButton) {
- let hotButton = signButton.cloneNode(false)
- let parent = signButton.parentNode;
- parent.appendChild(hotButton)
- hotButton.innerHTML = '不想登录,去热榜转转'
- hotButton.onclick = function () {
- location.href = 'https://www.zhihu.com/billboard'
- }
- }
- }
- function fixQuestionPage () {
- const sConfig = window.localStorage
- let cssFix = document.createElement('style')
- // 吸底的评论栏
- cssFix.innerHTML += `.RichContent-actions{bottom:auto !important;}`
- // 直接屏蔽顶部问题相关
- if (sConfig.showQuestion === 'false') {
- cssFix.innerHTML += `.QuestionHeader-footer{display:none !important;}`
- cssFix.innerHTML += `.QuestionHeader{display:none !important;}`
- cssFix.innerHTML += `.Question-main{margin:0 !important;}`
- }
- // 问题页面登录弹窗
- //cssFix.innerHTML += `.Modal-backdrop{background-color: transparent;}`
- //cssFix.innerHTML += `.signFlowModal{display:none !important;}`
- cssFix.innerHTML += `.ysn1om,.css-1hwwfws,.css-1ynzxqw{display:none !important;}`
- const but = document.getElementsByClassName('Button Modal-closeButton Button--plain')[0]
- but.click()
- // 顶部关键词
- cssFix.innerHTML += `.QuestionHeader-tags{display:none !important;}`
- // 问题相关撑满
- cssFix.innerHTML += `.QuestionHeader-content{padding-left:0}`
- cssFix.innerHTML += `.QuestionHeader-footer{display:none !important;}`
- // cssFix.innerHTML += `.QuestionHeader-main {margin:10px;}'
- cssFix.innerHTML += `.QuestionHeader{width:694px;margin:0 auto;padding:0;min-width:auto;}`
- // 未展开时内容居中
- cssFix.innerHTML += `.ListShortcut{margin:0 auto;}`
- // 展开时居中
- cssFix.innerHTML += `.Question-sideColumn{display:none;}`
- cssFix.innerHTML += `.Question-mainColumn{margin:0 auto;}`
- // 内容图片/视频最大300px
- cssFix.innerHTML += `.origin_image{max-width:300px !important;}`
- cssFix.innerHTML += `.RichText-video{max-width:300px !important;}`
- // 内容链接去特征
- cssFix.innerHTML +=
- `.LinkCard{margin:auto !important;display:inline !important;}.LinkCard-content{background-color: transparent;}.LinkCard-title{color:#999 !important}`
- // 点赞
- cssFix.innerHTML +=
- `.VoteButton{color:#999 !important;background: none; !important}`
- // 评论展开宽度
- cssFix.innerHTML += `.Modal--fullPage{width:650px}`
- // 评论展开关闭按钮复位
- cssFix.innerHTML += `.Modal-closeButton{right:0;}`
- cssFix.innerHTML += `.Modal-closeIcon{fill:#919191;}`
- // 广告商品链接
- cssFix.innerHTML +=
- `.RichText-MCNLinkCardContainer{display:none !important;}`
- // 夹缝广告
- cssFix.innerHTML +=
- `.Pc-word{display:none !important;}`
- document.getElementsByTagName('head')[0].appendChild(cssFix)
- // 右侧问题相关
- document.getElementsByClassName('QuestionHeader-side')[1].style.display =
- 'none'
- document.getElementsByClassName('Question-sideColumn')[0].style.display =
- 'none'
- // 顶部问题标题
- document.getElementsByTagName('header')[0].style.display = 'none'
- // 内容撑满
- document.getElementsByClassName('Question-main')[0].style.width = 'auto'
- document.getElementsByClassName('Question-main')[0].style.padding = '0'
- document.getElementsByClassName('Question-mainColumn')[0].style.margin =
- '0 auto'
- }
- function fixSearchPage () {
- let cssFix = document.createElement('style')
- // header
- cssFix.innerHTML += `header{display:none !important;}`
- // SearchTabs
- cssFix.innerHTML += `.SearchTabs{display:none !important;}`
- // SearchSideBar
- cssFix.innerHTML += `.SearchSideBar{display:none !important;}`
- // CornerButtons
- cssFix.innerHTML +=`.CornerButtons{display:none !important;}`
- // .SearchMain
- cssFix.innerHTML +=
- `.SearchMain{width:100% !important;margin: 0 !important;}`
- // Search-container
- cssFix.innerHTML +=
- `.Search-container{width: auto !important;min-height: auto !important;margin:none !important;}`
- cssFix.innerHTML += `.SearchSections{width:auto !important}`
- // 点赞
- cssFix.innerHTML +=
- `.VoteButton{color:#999 !important;background: none; !important}`
- // 内容图片/视频最大300px
- cssFix.innerHTML += `.origin_image{max-width:300px !important;}`
- cssFix.innerHTML += `.RichText-video{max-width:300px !important;}`
- document.getElementsByTagName('head')[0].appendChild(cssFix)
- }
- function fixZhuanLan () {
- let cssFix = document.createElement('style')
- cssFix.innerHTML +=`.Recommendations-Main{display:none !important;}`
- document.getElementsByTagName('head')[0].appendChild(cssFix)
- }
- function fixHomePage () {
- let cssFix = document.createElement('style')
- cssFix.innerHTML += `.GlobalSideBar{display:none !important;}`
- cssFix.innerHTML += `.Topstory-container{width:100% !important;padding:0 !important}`
- cssFix.innerHTML += `.Topstory-mainColumn{width:100% !important;}`
- document.getElementsByTagName('head')[0].appendChild(cssFix)
- }
- function hideAuthor () {
- const answerList = document.getElementsByClassName('List-item')
- for (let index = 0; index < answerList.length; index++) {
- const obj = answerList[index]
- if(obj.innerHTML.includes('本内容版权为知乎及版权方所有,侵权必究'))
- {
- obj.style.display = 'none'
- }
- const key = JSON.parse(obj.getElementsByClassName('ContentItem AnswerItem')[0].getAttribute("data-zop"))
- if (key === null) {
- return
- }
- const blackList = window.localStorage.blackList.split(',')
- blackList.forEach(name => {
- if (key.authorName === name) {
- obj.style.display = 'none'
- }
- });
- }
- }
- function fixPageWidth(){
- let page = document.querySelector(".Question-mainColumn")
- let header = document.querySelector(".QuestionHeader")
- let headerCont = document.getElementsByClassName("QuestionHeader-content")
- page.style.width = window.localStorage.pageWidth
- header.style.width = window.localStorage.pageWidth
- headerCont[1].style.width = '100%'
- }
- })()