From 9c837248d6f751618e1b5e4aa74b6d955662a1e3 Mon Sep 17 00:00:00 2001
From: xiu2 <54703944+XIU2@users.noreply.github.com>
Date: Tue, 30 Mar 2021 21:40:03 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=20[=E6=94=B6=E8=B5=B7?=
=?UTF-8?q?=E5=BD=93=E5=89=8D=E5=9B=9E=E7=AD=94/=E8=AF=84=E8=AE=BA]=20?=
=?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=88=E8=A7=A3=E5=86=B3=E4=BA=86=E5=9C=A8?=
=?UTF-8?q?=E6=97=A2=E7=9C=8B=E4=B8=8D=E5=88=B0=E5=9B=BA=E5=AE=9A=E7=9A=84?=
=?UTF-8?q?=20[=E6=94=B6=E8=B5=B7=E8=AF=84=E8=AE=BA]=20=E5=8F=88=E7=9C=8B?=
=?UTF-8?q?=E4=B8=8D=E5=88=B0=E6=82=AC=E6=B5=AE=E7=9A=84=20[=E6=94=B6?=
=?UTF-8?q?=E8=B5=B7=E8=AF=84=E8=AE=BA]=20=E6=97=B6=E6=97=A0=E6=B3=95?=
=?UTF-8?q?=E6=94=B6=E8=B5=B7=E8=AF=84=E8=AE=BA=E7=9A=84=E9=97=AE=E9=A2=98?=
=?UTF-8?q?)=EF=BC=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Zhihu-Enhanced.user.js | 398 +++++++++++++++++++++--------------------
1 file changed, 208 insertions(+), 190 deletions(-)
diff --git a/Zhihu-Enhanced.user.js b/Zhihu-Enhanced.user.js
index 6b5b2ce..2a9e431 100644
--- a/Zhihu-Enhanced.user.js
+++ b/Zhihu-Enhanced.user.js
@@ -1,6 +1,6 @@
// ==UserScript==
// @name 知乎增强
-// @version 1.3.2
+// @version 1.3.3
// @author X.I.U
// @description 移除登录弹窗、一键收起回答、收起当前回答/评论(点击两侧空白处)、快捷回到顶部(右键两侧空白处)、置顶显示时间、显示问题时间、区分问题文章、默认高清原图、默认站外直链
// @match *://www.zhihu.com/*
@@ -69,6 +69,212 @@ function menu_value(menuName) {
}
+// 一键收起回答
+function collapsedAnswer(){
+ if(menu_value('menu_collapsedAnswer')){
+ let button_Add = ``
+ let style_Add = document.createElement('style');
+ style_Add.innerHTML = '.CornerButton{margin-bottom:8px !important;}.CornerButtons{bottom:45px !important;}';
+ document.head.appendChild(style_Add);
+ $(".CornerAnimayedFlex").prepend(button_Add);
+ $("#collapsed-button").on("click", function () {
+ document.querySelectorAll('.ContentItem-rightButton').forEach(function (el) {
+ if (el.hasAttribute('data-zop-retract-question')) {
+ el.click()
+ }
+ });
+ })
+ }
+}
+
+
+// 收起当前回答、评论(监听点击事件,点击网页两侧空白处)
+function collapsedNowAnswer(selectors){
+ backToTop(selectors)
+ if(menu_value('menu_collapsedNowAnswer')){
+ document.querySelector(selectors).onclick = function(event){
+ if (event.target==this) {
+ let rightButton = document.querySelector('.ContentItem-actions.Sticky.RichContent-actions.is-fixed.is-bottom')
+ if(rightButton) { // 悬浮的 [收起回答](此时正在浏览回答内容 [头部区域 + 中间区域])
+ // 固定的 [收起评论](先看看是否展开评论)
+ let commentCollapseButton = rightButton.querySelector('button.Button.ContentItem-action.Button--plain.Button--withIcon.Button--withLabel')
+ if(commentCollapseButton && commentCollapseButton.innerText.indexOf("收起评论") > -1) {
+ commentCollapseButton.click();
+ }
+ // 再去收起回答
+ rightButton = rightButton.querySelector('.ContentItem-rightButton')
+ if(rightButton && rightButton.hasAttribute('data-zop-retract-question')) {
+ rightButton.click();
+ }
+ }else{ // 固定的 [收起回答](此时正在浏览回答内容 [尾部区域])
+ for (let el of document.querySelectorAll('.ContentItem-rightButton')) {
+ if (el.hasAttribute('data-zop-retract-question')) {
+ if (isElementInViewport(el)) {
+ // 固定的 [收起评论](先看看是否展开评论)
+ let commentCollapseButton = el.parentNode.querySelector('button.Button.ContentItem-action.Button--plain.Button--withIcon.Button--withLabel')
+ if(commentCollapseButton && commentCollapseButton.innerText.indexOf("收起评论") > -1) {
+ commentCollapseButton.click();
+ }
+ el.click() // 再去收起回答
+ break
+ }
+ }
+ }
+ }
+
+ var commentCollapseButton_ = false;
+ // 悬浮的 [收起评论](此时正在浏览评论内容 [中间区域])
+ let commentCollapseButton = document.querySelector('.CommentCollapseButton')
+ if(commentCollapseButton) {
+ commentCollapseButton.click();
+ }else{ // 固定的 [收起评论](此时正在浏览评论内容 [头部区域])
+ for (let el of document.querySelectorAll('button.Button.ContentItem-action.Button--plain.Button--withIcon.Button--withLabel')) {
+ if (el.innerText.indexOf("收起评论") > -1) {
+ if (isElementInViewport(el)) {
+ el.click()
+ commentCollapseButton_ = true // 如果找到并点击了,就没必要执行下面的代码了(可视区域中没有 [收起评论] 时)
+ break
+ }
+ }
+ }
+ if(commentCollapseButton_ == false){ // 可视区域中没有 [收起评论] 时(此时正在浏览评论内容 [头部区域] + [尾部区域](不上不下的,既看不到固定的 [收起评论] 又看不到悬浮的 [收起评论])),需要判断可视区域中是否存在评论元素
+ for (let el of document.querySelectorAll('.NestComment')) {
+ if (isElementInViewport(el)) {
+ let commentCollapseButton = el.parentNode.parentNode.parentNode.parentNode.parentNode.querySelector('button.Button.ContentItem-action.Button--plain.Button--withIcon.Button--withLabel')
+ if (commentCollapseButton.innerText.indexOf("收起评论") > -1) {
+ commentCollapseButton.click()
+ break
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+
+// 回到顶部(监听点击事件,鼠标右键点击网页两侧空白处)
+function backToTop(selectors){
+ if(menu_value('menu_backToTop')){
+ document.querySelector(selectors).oncontextmenu = function(event){
+ if (event.target==this) {
+ event.preventDefault();
+ window.scrollTo(0,0)
+ }
+ }
+ }
+}
+
+
+//获取元素是否在可视区域
+function isElementInViewport(el) {
+ let rect = el.getBoundingClientRect();
+ return (
+ rect.top >= 0 &&
+ rect.left >= 0 &&
+ rect.bottom <=
+ (window.innerHeight || document.documentElement.clientHeight) &&
+ rect.right <=
+ (window.innerWidth || document.documentElement.clientWidth)
+ );
+}
+
+
+var postNum;
+// 区分问题文章
+function addTypeTips() {
+ if(menu_value('menu_typeTips')){
+ // URL 匹配正则表达式
+ let patt_zhuanlan = /zhuanlan.zhihu.com/,
+ patt_question = /question\/\d+/,
+ patt_question_answer = /answer\/\d+/,
+ patt_video = /\/zvideo\//,
+ patt_tip = /zhihu_e_tips/
+ let postList = document.querySelectorAll('h2.ContentItem-title a');
+ postNum = document.querySelectorAll('small.zhihu_e_tips');
+ //console.log(`${postList.length} ${postNum.length}`)
+ if (postList.length > postNum.length){
+ for(let num = postNum.length;num文章 ` + postList[num].innerHTML
+ }else if (patt_question.test(postList[num].href)){ // 如果是问题
+ if (patt_question_answer.test(postList[num].href)){ // 如果是指向回答的问题(而非指向纯问题的链接)
+ postList[num].innerHTML = `问题 ` + postList[num].innerHTML
+ }else{
+ postList[num].innerHTML = `问题 ` + postList[num].innerHTML
+ }
+ }else if (patt_video.test(postList[num].href)){ // 如果是视频
+ postList[num].innerHTML = `视频 ` + postList[num].innerHTML
+ }
+ //postNum += 1;
+ }
+ }
+ }
+ }
+}
+
+
+// 监听 网页插入元素 事件
+function addEventListener_DOMNodeInserted() {
+ // 知乎免登录,来自:https://greasyfork.org/zh-CN/scripts/417126
+ let removeLoginModal = e => {
+ if (e.target.innerHTML && e.target.getElementsByClassName('Modal-wrapper').length > 0) {
+ if (e.target.getElementsByClassName('Modal-wrapper')[0].querySelector('.signFlowModal')){
+ e.target.getElementsByClassName('Modal-wrapper')[0].remove();
+ }
+ setTimeout(() => {document.documentElement.style.overflowY = 'scroll';}, 0);
+ }
+ }
+
+ // 收起当前评论(监听点击事件,点击网页两侧空白处)
+ let collapseNowComment = e => {
+ if (e.target.innerHTML && e.target.getElementsByClassName('Modal-wrapper Modal-enter').length > 0) {
+ document.getElementsByClassName('Modal-backdrop')[0].onclick = function(event){
+ if (event.target==this) {
+ let closeButton = document.getElementsByClassName('Modal-closeButton')[0]
+ if(closeButton) {
+ closeButton.click();
+ }
+ }
+ }
+ }
+ }
+
+ if (document.querySelector('button.AppHeader-login')){ // 未登录时才会监听并移除登录弹窗
+ document.addEventListener('DOMNodeInserted', removeLoginModal);
+ document.querySelector('button.AppHeader-login').onclick=function(){location.href='https://www.zhihu.com/signin';} // [登录]按钮跳转至登录页面
+ document.querySelector('.AppHeader-profile button.Button--primary').onclick=function(){location.href='https://www.zhihu.com/signin';} // [加入知乎]按钮跳转至注册页面(实际上是同一个页面)
+ } else if(window.location.href.indexOf("zhuanlan") > -1){
+ document.addEventListener('DOMNodeInserted', removeLoginModal);
+ }
+ document.addEventListener('DOMNodeInserted', collapseNowComment); // 收起当前评论(监听点击事件,点击网页两侧空白处)
+}
+
+
+// 监听 XMLHttpRequest 事件
+function EventXMLHttpRequest() {
+ var _send = window.XMLHttpRequest.prototype.send
+ function sendReplacement(data) {
+ //console.log(`111111`);
+ addTypeTips();
+ return _send.apply(this, arguments);
+ }
+ window.XMLHttpRequest.prototype.send = sendReplacement;
+}
+
+/*(function (open) {
+ XMLHttpRequest.prototype.open = function () {
+ this.addEventListener("readystatechange", function () {
+ //console.log(this.responseURL);
+ }, false);
+ open.apply(this, arguments);
+ };
+})(XMLHttpRequest.prototype.open);*/
+
+
// 置顶显示时间 - 首页,来自:https://greasyfork.org/scripts/402808
function topTime_index()
{
@@ -339,6 +545,7 @@ function directLink () {
$(".TopstoryItem--advertCard").hide();
}
+
// 默认高清原图,来自:https://greasyfork.org/scripts/402808
function originalPic(){
$("img").each(function(){
@@ -351,199 +558,10 @@ function originalPic(){
$(".Modal-inner").css({"overflow-y":"hidden"})
}
-// 一键收起回答
-function collapsedAnswer(){
- if(menu_value('menu_collapsedAnswer')){
- let button_Add = ``
- let style_Add = document.createElement('style');
- style_Add.innerHTML = '.CornerButton{margin-bottom:8px !important;}.CornerButtons{bottom:45px !important;}';
- document.head.appendChild(style_Add);
- $(".CornerAnimayedFlex").prepend(button_Add);
- $("#collapsed-button").on("click", function () {
- document.querySelectorAll('.ContentItem-rightButton').forEach(function (el) {
- if (el.hasAttribute('data-zop-retract-question')) {
- el.click()
- }
- });
- })
- }
-}
-
-
-// 收起当前回答、评论(监听点击事件,点击网页两侧空白处)
-function collapsedNowAnswer(selectors){
- backToTop(selectors)
- if(menu_value('menu_collapsedNowAnswer')){
- document.querySelector(selectors).onclick = function(event){
- if (event.target==this) {
- let rightButton = document.querySelector('.ContentItem-actions.Sticky.RichContent-actions.is-fixed.is-bottom')
- if(rightButton) { // 悬浮的 [收起回答]
- // 固定的 [收起评论]
- let commentCollapseButton = rightButton.querySelector('button.Button.ContentItem-action.Button--plain.Button--withIcon.Button--withLabel')
- if(commentCollapseButton && commentCollapseButton.innerText.indexOf("收起评论") > -1) {
- commentCollapseButton.click();
- }
- // 悬浮的 [收起回答]
- rightButton = rightButton.querySelector('.ContentItem-rightButton')
- if(rightButton && rightButton.hasAttribute('data-zop-retract-question')) {
- rightButton.click();
- }
- }else{ // 固定的 [收起回答]
- document.querySelectorAll('.ContentItem-rightButton').forEach(function (el) {
- if (el.hasAttribute('data-zop-retract-question')) {
- if (isElementInViewport(el)) {
- // 固定的 [收起评论]
- let commentCollapseButton = el.parentNode.querySelector('button.Button.ContentItem-action.Button--plain.Button--withIcon.Button--withLabel')
- if(commentCollapseButton && commentCollapseButton.innerText.indexOf("收起评论") > -1) {
- commentCollapseButton.click();
- }
- el.click()
- }
- }
- })
- }
-
- // 悬浮的 [收起评论]
- let commentCollapseButton = document.querySelector('.CommentCollapseButton')
- if(commentCollapseButton) {
- commentCollapseButton.click();
- }else{ // 固定的 [收起评论](针对短篇没有收起按钮的回答)
- document.querySelectorAll('button.Button.ContentItem-action.Button--plain.Button--withIcon.Button--withLabel').forEach(function (el) {
- if (el.innerText.indexOf("收起评论") > -1) {
- if (isElementInViewport(el)) {
- el.click()
- }
- }
- })
- }
- }
- }
- }
-}
-
-
-// 回到顶部(监听点击事件,鼠标右键点击网页两侧空白处)
-function backToTop(selectors){
- if(menu_value('menu_backToTop')){
- document.querySelector(selectors).oncontextmenu = function(event){
- if (event.target==this) {
- event.preventDefault();
- window.scrollTo(0,0)
- }
- }
- }
-}
-
-
-//获取元素是否在可视区域
-function isElementInViewport(el) {
- let rect = el.getBoundingClientRect();
- return (
- rect.top >= 0 &&
- rect.left >= 0 &&
- rect.bottom <=
- (window.innerHeight || document.documentElement.clientHeight) &&
- rect.right <=
- (window.innerWidth || document.documentElement.clientWidth)
- );
-}
-
-
-var postNum;
-// 区分问题文章
-function addTypeTips() {
- if(menu_value('menu_typeTips')){
- // URL 匹配正则表达式
- let patt_zhuanlan = /zhuanlan.zhihu.com/,
- patt_question = /question\/\d+/,
- patt_question_answer = /answer\/\d+/,
- patt_video = /\/zvideo\//,
- patt_tip = /zhihu_e_tips/
- let postList = document.querySelectorAll('h2.ContentItem-title a');
- postNum = document.querySelectorAll('small.zhihu_e_tips');
- //console.log(`${postList.length} ${postNum.length}`)
- if (postList.length > postNum.length){
- for(let num = postNum.length;num文章 ` + postList[num].innerHTML
- }else if (patt_question.test(postList[num].href)){ // 如果是问题
- if (patt_question_answer.test(postList[num].href)){ // 如果是指向回答的问题(而非指向纯问题的链接)
- postList[num].innerHTML = `问题 ` + postList[num].innerHTML
- }else{
- postList[num].innerHTML = `问题 ` + postList[num].innerHTML
- }
- }else if (patt_video.test(postList[num].href)){ // 如果是视频
- postList[num].innerHTML = `视频 ` + postList[num].innerHTML
- }
- //postNum += 1;
- }
- }
- }
- }
-}
-
-// 监听 网页插入元素 事件
-function addEventListener_DOMNodeInserted() {
- // 知乎免登录,来自:https://greasyfork.org/zh-CN/scripts/417126
- let removeLoginModal = e => {
- if (e.target.innerHTML && e.target.getElementsByClassName('Modal-wrapper').length > 0) {
- if (e.target.getElementsByClassName('Modal-wrapper')[0].querySelector('.signFlowModal')){
- e.target.getElementsByClassName('Modal-wrapper')[0].remove();
- }
- setTimeout(() => {document.documentElement.style.overflowY = 'scroll';}, 0);
- }
- }
-
- // 收起当前评论(监听点击事件,点击网页两侧空白处)
- let collapseNowComment = e => {
- if (e.target.innerHTML && e.target.getElementsByClassName('Modal-wrapper Modal-enter').length > 0) {
- document.getElementsByClassName('Modal-backdrop')[0].onclick = function(event){
- if (event.target==this) {
- let closeButton = document.getElementsByClassName('Modal-closeButton')[0]
- if(closeButton) {
- closeButton.click();
- }
- }
- }
- }
- }
-
- if (document.querySelector('button.AppHeader-login')){ // 未登录时才会监听并移除登录弹窗
- document.addEventListener('DOMNodeInserted', removeLoginModal);
- document.querySelector('button.AppHeader-login').onclick=function(){location.href='https://www.zhihu.com/signin';} // [登录]按钮跳转至登录页面
- document.querySelector('.AppHeader-profile button.Button--primary').onclick=function(){location.href='https://www.zhihu.com/signin';} // [加入知乎]按钮跳转至注册页面(实际上是同一个页面)
- } else if(window.location.href.indexOf("zhuanlan") > -1){
- document.addEventListener('DOMNodeInserted', removeLoginModal);
- }
- document.addEventListener('DOMNodeInserted', collapseNowComment); // 收起当前评论(监听点击事件,点击网页两侧空白处)
-}
-
-
-// 监听 XMLHttpRequest 事件
-function EventXMLHttpRequest() {
- var _send = window.XMLHttpRequest.prototype.send
- function sendReplacement(data) {
- //console.log(`111111`);
- addTypeTips();
- return _send.apply(this, arguments);
- }
- window.XMLHttpRequest.prototype.send = sendReplacement;
-}
-
-/*(function (open) {
- XMLHttpRequest.prototype.open = function () {
- this.addEventListener("readystatechange", function () {
- //console.log(this.responseURL);
- }, false);
- open.apply(this, arguments);
- };
-})(XMLHttpRequest.prototype.open);*/
(function() {
addEventListener_DOMNodeInserted(); // 监听 网页插入元素 事件
-
// 默认折叠邀请,来自:https://greasyfork.org/scripts/402808
let timer=setInterval(function(){
if($(".QuestionInvitation-content").text().indexOf("更多推荐结果") > -1)