diff --git a/Zhihu-Enhanced.user.js b/Zhihu-Enhanced.user.js index 0a19eef..f89ae02 100644 --- a/Zhihu-Enhanced.user.js +++ b/Zhihu-Enhanced.user.js @@ -1,6 +1,6 @@ // ==UserScript== // @name 知乎增强 -// @version 1.5.3 +// @version 1.5.4 // @author X.I.U // @description 移除登录弹窗、一键收起回答、收起当前回答/评论(点击两侧空白处)、快捷回到顶部(右键两侧空白处)、屏蔽用户 (发布的内容)、屏蔽关键词(标题/评论)、屏蔽盐选内容、展开问题描述、置顶显示时间、显示问题时间、区分问题文章、默认高清原图、默认站外直链 // @match *://www.zhihu.com/* @@ -13,6 +13,7 @@ // @grant GM_getValue // @grant GM_setValue // @grant GM_notification +// @grant GM_info // @license GPL-3.0 License // @run-at document-end // @namespace https://greasyfork.org/scripts/4122051 @@ -25,9 +26,9 @@ var menu_ALL = [ ['menu_collapsedAnswer', '一键收起回答', '一键收起回答', true], ['menu_collapsedNowAnswer', '收起当前回答/评论(点击两侧空白处)', '收起当前回答/评论', true], ['menu_backToTop', '快捷回到顶部(右键两侧空白处)', '快捷回到顶部', true], - ['menu_blockUsers', '屏蔽指定用户', '屏蔽指定用户', false], + ['menu_blockUsers', '屏蔽指定用户', '屏蔽指定用户', true], ['menu_customBlockUsers', '自定义屏蔽用户', '自定义屏蔽用户', ['故事档案局', '盐选推荐', '盐选科普', '盐选成长计划', '知乎盐选会员', '知乎盐选创作者', '盐选心理', '盐选健康必修课', '盐选奇妙物语', '盐选生活馆', '盐选职场', '盐选文学甄选', '盐选作者小管家', '盐选博物馆', '盐选点金', '盐选测评室', '盐选科技前沿', '盐选会员精品']], - ['menu_blockKeywords', '屏蔽指定关键词', '屏蔽指定关键词', false], + ['menu_blockKeywords', '屏蔽指定关键词', '屏蔽指定关键词', true], ['menu_customBlockKeywords', '自定义屏蔽关键词', '自定义屏蔽关键词', []], ['menu_blockYanXuan', '屏蔽盐选内容', '屏蔽盐选内容', false], ['menu_questionRichTextMore', '展开问题描述', '展开问题描述', false], @@ -88,17 +89,16 @@ function menu_value(menuName) { // 一键收起回答 function collapsedAnswer() { if (!menu_value('menu_collapsedAnswer')) return - 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); - document.querySelector('.CornerAnimayedFlex').insertAdjacentHTML('afterBegin', button_Add); - document.getElementById('collapsed-button').onclick = function () { - document.querySelectorAll('.ContentItem-rightButton').forEach(function (el) { - if (el.hasAttribute('data-zop-retract-question')) { - el.click() - } - }); + if (document.querySelector('.CornerAnimayedFlex')) { + document.head.appendChild(document.createElement('style')).textContent = '.CornerButton{margin-bottom:8px !important;}.CornerButtons{bottom:45px !important;}'; + document.querySelector('.CornerAnimayedFlex').insertAdjacentHTML('afterBegin', ''); + document.getElementById('collapsed-button').onclick = function () { + document.querySelectorAll('.ContentItem-rightButton').forEach(function (el) { + if (el.hasAttribute('data-zop-retract-question')) { + el.click() + } + }); + } } } @@ -108,7 +108,7 @@ function collapsedNowAnswer(selectors) { backToTop(selectors) // 快捷回到顶部 if (!menu_value('menu_collapsedNowAnswer')) return document.querySelector(selectors).onclick = function(event){ - if (event.target==this) { + if (event.target == this) { // 下面这段主要是 [收起回答],顺便 [收起评论](如果展开了的话) let rightButton = document.querySelector('.ContentItem-actions.Sticky.RichContent-actions.is-fixed.is-bottom') // 悬浮在底部的 [收起回答](此时正在浏览回答内容 [中间区域]) @@ -208,7 +208,7 @@ function collapsedNowAnswer(selectors) { function backToTop(selectors) { if (!menu_value('menu_backToTop')) return document.querySelector(selectors).oncontextmenu = function(event){ - if (event.target==this) { + if (event.target == this) { event.preventDefault(); window.scrollTo(0,0) } @@ -486,8 +486,10 @@ function blockUsers(type) { item1 = target.querySelector('a.UserLink-link'), name = item1.textContent, userid = item1.href.split('/')[4]; - item.insertAdjacentHTML('beforeend', ``); - item.lastElementChild.onclick = function(){blockUsers_button_add(this.dataset.name, this.dataset.userid, false)} + if (item && !target.querySelector('button[data-name][data-userid]')) { + item.insertAdjacentHTML('beforeend', ``); + item.lastElementChild.onclick = function(){blockUsers_button_add(this.dataset.name, this.dataset.userid, false)} + } } } } @@ -1149,64 +1151,79 @@ function addLocationchange() { (function() { removeLogin(); // 移除登录弹窗 - closeFloatingComments(); // 快捷关闭悬浮评论(监听点击事件,点击网页两侧空白处) - questionInvitation(); // 默认折叠邀请 setInterval(originalPic,100); // 默认高清原图 if (menu_value('menu_directLink')) setInterval(directLink, 100); // 默认站外直链 - blockKeywords('comment'); // 屏蔽指定关键词(评论) + addLocationchange(); + window.addEventListener('locationchange', function(){ // 针对的是从单个回答页跳转到完整回答页时 + if (window.location.pathname.indexOf('question') > -1 && window.location.pathname.indexOf('waiting') == -1 && window.location.pathname.indexOf('answer') == -1) { // 回答页 // + setTimeout(function(){ + collapsedNowAnswer('.QuestionPage'); // 收起当前回答 + 快捷返回顶部 + collapsedNowAnswer('.Question-main'); // 收起当前回答 + 快捷返回顶部 + questionRichTextMore(); // 展开问题描述 + blockUsers('question'); // 屏蔽指定用户 + blockYanXuan(); // 屏蔽盐选内容 + }, 300); + } + }) - if (window.location.href.indexOf("question") > -1) { // 回答页 // - if (window.location.href.indexOf("waiting") == -1) { - collapsedAnswer(); // 一键收起回答 - collapsedNowAnswer(".QuestionPage"); // 收起当前回答 + 快捷返回顶部 - collapsedNowAnswer(".Question-main"); // 收起当前回答 + 快捷返回顶部 - questionRichTextMore(); // 展开问题描述 - blockUsers('question'); // 屏蔽指定用户 - blockYanXuan(); // 屏蔽盐选内容 + if (GM_info.scriptHandler === 'Violentmonkey') { + setTimeout(start, 300); + } else { + start(); + } + + function start(){ + collapsedAnswer(); // 一键收起回答 + closeFloatingComments(); // 快捷关闭悬浮评论(监听点击事件,点击网页两侧空白处) + questionInvitation(); // 默认折叠邀请 + blockKeywords('comment'); // 屏蔽指定关键词(评论) + if (window.location.href.indexOf('question') > -1) { // 回答页 // + if (window.location.href.indexOf('waiting') == -1) { + collapsedNowAnswer('.QuestionPage'); // 收起当前回答 + 快捷返回顶部 + collapsedNowAnswer('.Question-main'); // 收起当前回答 + 快捷返回顶部 + questionRichTextMore(); // 展开问题描述 + blockUsers('question'); // 屏蔽指定用户 + blockYanXuan(); // 屏蔽盐选内容 + } + setInterval(topTime_question, 300); // 置顶显示时间 + } else if (window.location.href.indexOf('search') > -1) { // 搜索结果页 // + collapsedNowAnswer('main div'); // 收起当前回答 + 快捷返回顶部 + collapsedNowAnswer('.Search-container'); // 收起当前回答 + 快捷返回顶部 + setInterval(topTime_search, 300); // 置顶显示时间 + EventXMLHttpRequest(); // 区分问题文章 + blockUsers('search'); // 屏蔽指定用户 + blockKeywords('search'); // 屏蔽指定关键词 + } else if (window.location.href.indexOf('topic') > -1) { // 话题页 // + if (window.location.href.indexOf('hot') > -1 || window.location.href.indexOf('top-answers') > -1) { // 仅限 [讨论] [精华] + collapsedNowAnswer('main.App-main'); // 收起当前回答 + 快捷返回顶部 + collapsedNowAnswer('.ContentLayout'); // 收起当前回答 + 快捷返回顶部 + setInterval(topTime_people, 300); // 置顶显示时间 + EventXMLHttpRequest(); // 区分问题文章 + blockUsers('topic'); // 屏蔽指定用户 + blockKeywords('topic'); // 屏蔽指定关键词 + } + } else if (window.location.href.indexOf('zhuanlan') > -1){ // 文章 // + backToTop('article.Post-Main.Post-NormalMain'); // 快捷返回顶部 + backToTop('div.Post-Sub.Post-NormalSub'); // 快捷返回顶部 + setInterval(topTime_zhuanlan, 300); // 置顶显示时间 + blockUsers(); // 屏蔽指定用户 + } else if (window.location.href.indexOf('column') > -1) { // 专栏 // + collapsedNowAnswer('main div'); // 收起当前回答 + 快捷返回顶部 + setInterval(topTime_zhuanlan, 300); // 置顶显示时间 + blockUsers(); // 屏蔽指定用户 + } else if (window.location.href.indexOf('people') > -1 || window.location.href.indexOf('org') > -1) { // 用户主页 // + collapsedNowAnswer('main div'); // 收起当前回答 + 快捷返回顶部 + collapsedNowAnswer('.Profile-main'); // 收起当前回答 + 快捷返回顶部 + setInterval(topTime_people, 300); // 置顶显示时间 + blockUsers('people'); // 屏蔽指定用户 + blockKeywords('people'); // 屏蔽指定关键词 + } else { // 首页 // + collapsedNowAnswer('main div'); // 收起当前回答 + 快捷返回顶部 + collapsedNowAnswer('.Topstory-container'); // 收起当前回答 + 快捷返回顶部 + setInterval(topTime_index, 300); // 置顶显示时间 + EventXMLHttpRequest(); // 区分问题文章 + blockUsers('index'); // 屏蔽指定用户 + blockKeywords('index'); // 屏蔽指定关键词 } - setInterval(topTime_question, 300); // 置顶显示时间 - } else if (window.location.href.indexOf("search") > -1) { // 搜索结果页 // - collapsedAnswer(); // 一键收起回答 - collapsedNowAnswer("main div"); // 收起当前回答 + 快捷返回顶部 - collapsedNowAnswer(".Search-container"); // 收起当前回答 + 快捷返回顶部 - setInterval(topTime_search, 300); // 置顶显示时间 - EventXMLHttpRequest(); // 区分问题文章 - blockUsers('search'); // 屏蔽指定用户 - blockKeywords('search'); // 屏蔽指定关键词 - } else if (window.location.href.indexOf("topic") > -1) { // 话题页 // - if (window.location.href.indexOf("hot") > -1 || window.location.href.indexOf("top-answers") > -1) { // 仅限 [讨论] [精华] - collapsedAnswer(); // 一键收起回答 - collapsedNowAnswer("main.App-main"); // 收起当前回答 + 快捷返回顶部 - collapsedNowAnswer(".ContentLayout"); // 收起当前回答 + 快捷返回顶部 - setInterval(topTime_people, 300); // 置顶显示时间 - EventXMLHttpRequest(); // 区分问题文章 - blockUsers('topic'); // 屏蔽指定用户 - blockKeywords('topic'); // 屏蔽指定关键词 - } - } else if (window.location.href.indexOf("zhuanlan") > -1){ // 文章 // - backToTop("article.Post-Main.Post-NormalMain"); // 快捷返回顶部 - backToTop("div.Post-Sub.Post-NormalSub"); // 快捷返回顶部 - setInterval(topTime_zhuanlan, 300); // 置顶显示时间 - blockUsers(); // 屏蔽指定用户 - } else if (window.location.href.indexOf("column") > -1) { // 专栏 // - collapsedAnswer(); // 一键收起回答 - collapsedNowAnswer("main div"); // 收起当前回答 + 快捷返回顶部 - setInterval(topTime_zhuanlan, 300); // 置顶显示时间 - blockUsers(); // 屏蔽指定用户 - } else if (window.location.href.indexOf("people") > -1 || window.location.href.indexOf("org") > -1) { // 用户主页 // - collapsedAnswer(); // 一键收起回答 - collapsedNowAnswer("main div"); // 收起当前回答 + 快捷返回顶部 - collapsedNowAnswer(".Profile-main"); // 收起当前回答 + 快捷返回顶部 - setInterval(topTime_people, 300); // 置顶显示时间 - blockUsers('people'); // 屏蔽指定用户 - blockKeywords('people'); // 屏蔽指定关键词 - } else { // 首页 // - collapsedAnswer(); // 一键收起回答 - collapsedNowAnswer("main div"); // 收起当前回答 + 快捷返回顶部 - collapsedNowAnswer(".Topstory-container"); // 收起当前回答 + 快捷返回顶部 - setInterval(topTime_index, 300); // 置顶显示时间 - EventXMLHttpRequest(); // 区分问题文章 - blockUsers('index'); // 屏蔽指定用户 - blockKeywords('index'); // 屏蔽指定关键词 } })(); \ No newline at end of file