From 0fe3636be5e2509b72946a0990de981c0307bdc6 Mon Sep 17 00:00:00 2001 From: xiu2 <54703944+XIU2@users.noreply.github.com> Date: Tue, 30 Nov 2021 10:08:38 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20=E6=89=A7=E8=A1=8C?= =?UTF-8?q?=E4=B8=A4=E6=AC=A1=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Zhihu-Enhanced.user.js | 1500 +--------------------------------------- 1 file changed, 1 insertion(+), 1499 deletions(-) diff --git a/Zhihu-Enhanced.user.js b/Zhihu-Enhanced.user.js index 257bb12..64b8718 100644 --- a/Zhihu-Enhanced.user.js +++ b/Zhihu-Enhanced.user.js @@ -1,1504 +1,6 @@ // ==UserScript== // @name 知乎增强 -// @version 1.8.1 -// @author X.I.U -// @description 移除登录弹窗、屏蔽首页视频、默认收起回答、快捷收起当前回答/评论(左键两侧空白处)、快捷回到顶部(右键两侧空白处)、屏蔽用户 (发布的内容)、屏蔽关键词(标题/评论)、屏蔽盐选内容、净化标题消息、展开问题描述、置顶显示时间、完整问题时间、区分问题文章、直达问题按钮、默认高清原图、默认站外直链 -// @match *://www.zhihu.com/* -// @match *://zhuanlan.zhihu.com/* -// @icon https://static.zhihu.com/heifetz/favicon.ico -// @grant GM_xmlhttpRequest -// @grant GM_registerMenuCommand -// @grant GM_unregisterMenuCommand -// @grant GM_openInTab -// @grant GM_getValue -// @grant GM_setValue -// @grant GM_notification -// @grant GM_info -// @license GPL-3.0 License -// @run-at document-end -// @incompatible safari -// @namespace https://greasyfork.org/scripts/4122051 -// @supportURL https://github.com/XIU2/UserScript -// @homepageURL https://github.com/XIU2/UserScript -// ==/UserScript== - -'use strict'; -var menu_ALL = [ - ['menu_defaultCollapsedAnswer', '默认收起回答', '默认收起回答', true], - ['menu_collapsedAnswer', '一键收起回答', '一键收起回答', true], - ['menu_collapsedNowAnswer', '收起当前回答/评论 (点击两侧空白处)', '收起当前回答/评论', true], - ['menu_backToTop', '快捷回到顶部 (右键两侧空白处)', '快捷回到顶部', true], - ['menu_blockUsers', '屏蔽指定用户', '屏蔽指定用户', true], - ['menu_customBlockUsers', '自定义屏蔽用户', '自定义屏蔽用户', ['故事档案局', '盐选推荐', '盐选科普', '盐选成长计划', '知乎盐选会员', '知乎盐选创作者', '盐选心理', '盐选健康必修课', '盐选奇妙物语', '盐选生活馆', '盐选职场', '盐选文学甄选', '盐选作者小管家', '盐选博物馆', '盐选点金', '盐选测评室', '盐选科技前沿', '盐选会员精品']], - ['menu_blockKeywords', '屏蔽指定关键词', '屏蔽指定关键词', true], - ['menu_customBlockKeywords', '自定义屏蔽关键词', '自定义屏蔽关键词', []], - ['menu_blockType', '屏蔽指定类别 (视频/文章等)', '勾选 = 屏蔽该类别的信息流', ''], - ['menu_blockTypeVideo', '视频 [首页、搜索页]', '视频(首页、搜索页)', true], - ['menu_blockTypeArticle', '文章 [首页、搜索页]', '文章(首页、搜索页)', false], - ['menu_blockTypeTopic', '话题 [搜索页]', '话题(搜索页)', false], - ['menu_blockTypeSearch', '杂志文章、相关搜索等 [搜索页]', '相关搜索、杂志等(搜索页)', false], - ['menu_blockYanXuan', '屏蔽盐选内容', '屏蔽盐选内容', false], - ['menu_cleanTitles', '净化标题消息 (标题中的私信/消息)', '净化标题提醒', false], - ['menu_questionRichTextMore', '展开问题描述', '展开问题描述', false], - ['menu_publishTop', '置顶显示时间', '置顶显示时间', true], - ['menu_allTime', '完整显示时间', '完整显示时间', true], - ['menu_typeTips', '区分问题文章', '区分问题文章', true], - ['menu_toQuestion', '直达问题按钮', '直达问题按钮', true], - ['menu_directLink', '默认站外直链', '默认站外直链', true] -], menu_ID = []; -for (let i=0;i menu_ALL.length){ // 如果菜单ID数组多于菜单数组,说明不是首次添加菜单,需要卸载所有脚本菜单 - for (let i=0;i.zhihuE_SettingRoot {position: absolute;top: 50%;left: 50%;-webkit-transform: translate(-50%, -50%);-moz-transform: translate(-50%, -50%);-ms-transform: translate(-50%, -50%);-o-transform: translate(-50%, -50%);transform: translate(-50%, -50%);width: auto;min-width: 400px;max-width: 600px;height: auto;min-height: 150px;max-height: 400px;color: #535353;background-color: #fff;border-radius: 3px;} -.zhihuE_SettingBackdrop_1 {position: fixed;top: 0;right: 0;bottom: 0;left: 0;z-index: 203;display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-orient: vertical;-webkit-box-direction: normal;-ms-flex-direction: column;flex-direction: column;-webkit-box-pack: center;-ms-flex-pack: center;justify-content: center;overflow-x: hidden;overflow-y: auto;-webkit-transition: opacity .3s ease-out;transition: opacity .3s ease-out;} -.zhihuE_SettingBackdrop_2 {position: absolute;top: 0;right: 0;bottom: 0;left: 0;z-index: 0;background-color: rgba(18,18,18,.65);-webkit-transition: background-color .3s ease-out;transition: background-color .3s ease-out;} -.zhihuE_SettingRoot .zhihuE_SettingHeader {padding: 10px 20px;color: #fff;font-weight: bold;background-color: #3994ff;border-radius: 3px 3px 0 0;} -.zhihuE_SettingRoot .zhihuE_SettingMain {padding: 10px 20px;border-radius: 0 0 3px 3px;} -.zhihuE_SettingHeader span {float: right;cursor: pointer;} -.zhihuE_SettingMain input {margin: 10px 6px 10px 0;cursor: pointer;vertical-align:middle} -.zhihuE_SettingMain label {margin-right: 20px;user-select: none;cursor: pointer;vertical-align:middle} -.zhihuE_SettingMain hr {border: 0.5px solid #f4f4f4;} -[data-theme="dark"] .zhihuE_SettingRoot {color: #adbac7;background-color: #343A44;} -[data-theme="dark"] .zhihuE_SettingHeader {color: #d0d0d0;background-color: #2D333B;} -[data-theme="dark"] .zhihuE_SettingMain hr {border: 0.5px solid #2d333b;} -
-
${title}
-

${tips}


` - if (line) _br = '
' - for (let i=0; i${menu[i][1]}${_br}` - } else { - _html += `${_br}` - } - } - _html += `
` - document.body.insertAdjacentHTML('beforeend', _html); // 插入网页末尾 - setTimeout(function() { // 延迟 100 毫秒,避免太快 - // 关闭按钮 点击事件 - document.querySelector('.zhihuE_SettingClose').onclick = function(){this.parentElement.parentElement.parentElement.remove();document.querySelector('.zhihuE_SettingStyle').remove();} - // 点击周围空白处 = 点击关闭按钮 - document.querySelector('.zhihuE_SettingBackdrop_2').onclick = function(event){if (event.target == this) {document.querySelector('.zhihuE_SettingClose').click();};} - // 复选框 点击事件 - document.getElementsByName('zhihuE_Setting').forEach(function (checkBox) { - checkBox.addEventListener('click', function(){if (this.checked) {GM_setValue(this.value, true);} else {GM_setValue(this.value, false);}}); - }) - }, 100) -} - - -// 添加收起回答观察器 -function getCollapsedAnswerObserver() { - if (!window._collapsedAnswerObserver) { - const observer = new MutationObserver(mutations => { - for (const mutation of mutations) { - if (mutation.target.hasAttribute('script-collapsed')) return - if (!mutation.target.classList.contains('RichContent')) continue - for (const addedNode of mutation.addedNodes) { - if (addedNode.nodeType != Node.ELEMENT_NODE) continue - const button = addedNode.querySelector('.ContentItem-actions.Sticky [data-zop-retract-question]'); - if (button) { - mutation.target.setAttribute('script-collapsed', ''); - button.click(); - return - } - } - } - }) - - observer.start = function() { - if (!this._active) { - this.observe(document, { childList: true, subtree: true }); - this._active = true; - } - } - observer.end = function() { - if (this._active) { - this.disconnect(); - } - } - - window.addEventListener('locationchange', function() { - observer[location.href.indexOf('/answer/') === -1 ? 'start' : 'end'](); - }) - window._collapsedAnswerObserver = observer; - } - return window._collapsedAnswerObserver -} - - -// 默认收起回答 -function defaultCollapsedAnswer() { - if (!menu_value('menu_defaultCollapsedAnswer')) return - const observer = getCollapsedAnswerObserver(); - if (location.href.indexOf('/answer/') === -1) { - observer.start(); - } -} - - -// 一键收起回答(全部) -function collapsedAnswer() { - if (!menu_value('menu_collapsedAnswer')) return - 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 () { - if (location.pathname === '/' || location.pathname === '/hot' || location.pathname === '/follow') { - document.querySelectorAll('.ContentItem-rightButton').forEach(function (el) { - if (el.hasAttribute('data-zop-retract-question')) { - el.click() - } - }); - } else { - document.querySelectorAll('[script-collapsed]').forEach(function(scriptCollapsed) { - scriptCollapsed.querySelectorAll('.ContentItem-actions [data-zop-retract-question], .ContentItem-actions.Sticky [data-zop-retract-question]').forEach(function(button) { - button.click(); - }) - }) - document.querySelectorAll('.RichContent:not([script-collapsed]) .ContentItem-actions.Sticky [data-zop-retract-question]').forEach(function(button) { - let el = button.parentElement; - while (!el.classList.contains('RichContent')) { - el = el.parentElement; - } - if (el) { - el.setAttribute('script-collapsed', ''); - } - button.click(); - }) - const observer = getCollapsedAnswerObserver(); - observer.start(); - if (!menu_value('menu_defaultCollapsedAnswer') && !observer._disconnectListener) { - window.addEventListener('locationchange', function() { - observer.end(); - window._collapsedAnswerObserver = null; - }) - observer._disconnectListener = true; - } - } - } - } -} - - -// 收起当前回答、评论(监听点击事件,点击网页两侧空白处) -function collapsedNowAnswer(selectors) { - backToTop(selectors) // 快捷回到顶部 - if (!menu_value('menu_collapsedNowAnswer')) return - 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:first-of-type') - if (commentCollapseButton && commentCollapseButton.textContent.indexOf('收起评论') > -1) commentCollapseButton.click(); - // 再去收起回答 - rightButton = rightButton.querySelector('.ContentItem-rightButton[data-zop-retract-question]') - if (rightButton) rightButton.click(); - // 固定在回答底部的 [收起回答](此时正在浏览回答内容 [尾部区域]) - } else { - let answerCollapseButton_ = false; - for (let el of document.querySelectorAll('.ContentItem-rightButton[data-zop-retract-question]')) { // 遍历所有回答底部的 [收起] 按钮 - if (isElementInViewport(el)) { // 判断该 [收起] 按钮是否在可视区域内 - // 固定的 [收起评论](先看看是否展开评论,即存在 [收起评论] 按钮) - let commentCollapseButton = el.parentNode.querySelector('button.Button.ContentItem-action.Button--plain.Button--withIcon.Button--withLabel:first-of-type') - // 如果展开了评论,就收起评论 - if (commentCollapseButton && commentCollapseButton.textContent.indexOf('收起评论') > -1) commentCollapseButton.click(); - el.click() // 再去收起回答 - answerCollapseButton_ = true; // 如果找到并点击收起了,就没必要执行下面的代码了(可视区域中没有 [收起回答] 时) - break - } - } - // 针对完全看不到 [收起回答] 按钮时(如 [头部区域],以及部分明明很长却不显示悬浮横条的回答) - if (!answerCollapseButton_) { - for (let el of document.querySelectorAll('.List-item, .Card.AnswerCard')) { // 遍历所有回答主体元素 - if (isElementInViewport_(el)) { // 判断该回答是否在可视区域内 - // 固定的 [收起评论](先看看是否展开评论,即存在 [收起评论] 按钮) - let commentCollapseButton = el.parentNode.querySelector('button.Button.ContentItem-action.Button--plain.Button--withIcon.Button--withLabel:first-of-type') - // 如果展开了评论,就收起评论 - if (commentCollapseButton && commentCollapseButton.textContent.indexOf('收起评论') > -1) commentCollapseButton.click(); - let answerCollapseButton__ = document.querySelector('.ContentItem-rightButton[data-zop-retract-question]'); - if (answerCollapseButton__) answerCollapseButton__.click() // 再去收起回答 - break - } - } - } - } - - // 下面这段只针对 [收起评论](如果展开了的话) - let commentCollapseButton_ = false, commentCollapseButton__ = false; - // 悬浮的 [收起评论](此时正在浏览评论内容 [中间区域]) - let commentCollapseButton = document.querySelector('.CommentCollapseButton') - if (commentCollapseButton) { - commentCollapseButton.click(); - } else { // 固定的 [收起评论](此时正在浏览评论内容 [头部区域]) - let commentCollapseButton_1 = document.querySelectorAll('.ContentItem-actions > button.Button.ContentItem-action.Button--plain.Button--withIcon.Button--withLabel:first-of-type, .ContentItem-action > button.Button.Button--plain.Button--withIcon.Button--withLabel:first-of-type') - if (commentCollapseButton_1.length > 0) { - for (let el of commentCollapseButton_1) { - if (el.textContent.indexOf('收起评论') > -1) { - if (isElementInViewport(el)) { - el.click() - commentCollapseButton_ = true // 如果找到并点击了,就没必要执行下面的代码了(可视区域中没有 [收起评论] 时) - break - } - } - } - } - if (commentCollapseButton_ == false) { // 可视区域中没有 [收起评论] 时(此时正在浏览评论内容 [头部区域] + [尾部区域](不上不下的,既看不到固定的 [收起评论] 又看不到悬浮的 [收起评论])),需要判断可视区域中是否存在评论元素 - let commentCollapseButton_1 = document.querySelectorAll('.NestComment') - if (commentCollapseButton_1.length > 0) { - for (let el of commentCollapseButton_1) { - if (isElementInViewport(el)) { - let commentCollapseButton = findParentElement(el, 'ContentItem AnswerItem').querySelector('.ContentItem-actions > button.Button.ContentItem-action.Button--plain.Button--withIcon.Button--withLabel:first-of-type') - if (commentCollapseButton.textContent.indexOf('收起评论') > -1) { - commentCollapseButton.click() - commentCollapseButton__ = true // 如果找到并点击了,就没必要执行下面的代码了(可视区域中没有 评论元素 时) - break - } - } - } - } - if (commentCollapseButton__ == false) { // 如果上面的都没找到,那么就尝试寻找评论末尾的 [评论回复框] - let commentCollapseButton_2 = document.querySelectorAll('.CommentsV2-footer.CommentEditorV2--normal .CommentEditorV2-inputWrap') - if (commentCollapseButton_2.length > 0) { - for (let el of commentCollapseButton_2) { - if (isElementInViewport(el)) { - let commentCollapseButton = findParentElement(el, 'ContentItem AnswerItem').querySelector('.ContentItem-actions > button.Button.ContentItem-action.Button--plain.Button--withIcon.Button--withLabel:first-of-type') - //console.log(commentCollapseButton) - if (commentCollapseButton.textContent.indexOf('收起评论') > -1) { - commentCollapseButton.click() - break - } - } - } - } - } - } - } - } - } -} - - -// 回到顶部(监听点击事件,鼠标右键点击网页两侧空白处) -function backToTop(selectors) { - if (!menu_value('menu_backToTop')) return - 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) - ); -} -//获取元素是否在可视区域(部分可见) -function isElementInViewport_(el) { - let rect = el.getBoundingClientRect(); - return ( - rect.top <= (window.innerHeight || document.documentElement.clientHeight) && - rect.left <= (window.innerWidth || document.documentElement.clientWidth) - ); -} - - -// 自定义屏蔽用户 -function customBlockUsers() { - let nowBlockUsers = ''; - menu_value('menu_customBlockUsers').forEach(function(item){nowBlockUsers += '|' + item}) - let newBlockUsers = prompt('编辑 [自定义屏蔽用户]\n(不同用户名之间使用 "|" 分隔,例如:用户A|用户B|用户C )', nowBlockUsers.replace('|','')); - if (newBlockUsers === '') { - GM_setValue('menu_customBlockUsers', []); - registerMenuCommand(); // 重新注册脚本菜单 - } else if (newBlockUsers != null) { - GM_setValue('menu_customBlockUsers', newBlockUsers.split('|')); - registerMenuCommand(); // 重新注册脚本菜单 - } -}; - - -// 屏蔽指定用户 -function blockUsers(type) { - if (!menu_value('menu_blockUsers')) return - if (!menu_value('menu_customBlockUsers') || menu_value('menu_customBlockUsers').length < 1) return - switch(type) { - case 'index': - blockUsers_('.Card.TopstoryItem.TopstoryItem--old.TopstoryItem-isRecommend', 'Card TopstoryItem TopstoryItem--old TopstoryItem-isRecommend'); - break; - case 'question': - blockUsers_question(); - break; - case 'search': - blockUsers_search(); - break; - case 'topic': - blockUsers_('.List-item.TopicFeedItem', 'List-item TopicFeedItem'); - break; - case 'people': - blockUsers_button_people(); // 添加屏蔽用户按钮(用户主页) - break; - } - blockUsers_comment(); // 评论区 - blockUsers_button(); // 加入黑名单按钮 - - function blockUsers_(className1, className2) { - // 前几条因为是直接加载的,而不是动态插入网页的,所以需要单独判断 - function blockKeywords_now() { - document.querySelectorAll(className1).forEach(function(item1){ - let item = item1.querySelector('.ContentItem.AnswerItem, .ContentItem.ArticleItem'); // 用户名所在元素 - if (item) { - for (const keyword of menu_value('menu_customBlockUsers')) { // 遍历用户名黑名单 - if (item.dataset.zop.indexOf('authorName":"' + keyword + '",') > -1) { // 找到就删除该信息流 - console.log(item.dataset.zop); - item1.hidden = true; - break; - } - } - } - }) - } - - blockKeywords_now(); - window.addEventListener('locationchange', function(){ - setTimeout(blockKeywords_now, 500); // 网页 URL 变化后再次执行 - }) - - // 这个是监听网页插入事件,用来判断后续网页动态插入的元素 - const callback = (mutationsList, observer) => { - for (const mutation of mutationsList) { - for (const target of mutation.addedNodes) { - if (target.nodeType != 1) return - if (target.className === className2) { - let item = target.querySelector('.ContentItem.AnswerItem, .ContentItem.ArticleItem'); // 用户名所在元素 - if (item) { - for (const keyword of menu_value('menu_customBlockUsers')) { // 遍历用户名黑名单 - if (item.dataset.zop.indexOf('authorName":"' + keyword + '",') > -1) { // 找到就删除该信息流 - console.log(item.dataset.zop); - target.hidden = true; - break; - } - } - } - } - } - } - }; - const observer = new MutationObserver(callback); - observer.observe(document, { childList: true, subtree: true }); - } - - - function blockUsers_question() { - const blockUsers_question_ = (mutationsList, observer) => { - for (const mutation of mutationsList) { - for (const target of mutation.addedNodes) { - if (target.nodeType != 1) return - if (target.className === 'List-item' || target.className === 'Card AnswerCard') { - let item1 = target.querySelector('.ContentItem.AnswerItem'); - if (item1) { - menu_value('menu_customBlockUsers').forEach(function(item2){ // 遍历用户黑名单 - if (item1.dataset.zop.indexOf('authorName":"' + item2 + '",') > -1) { // 找到就删除该回答 - console.log(item1.dataset.zop) - target.hidden = true; - } - }) - } - } - } - } - }; - - const blockUsers_question_answer_ = (mutationsList, observer) => { - for (const mutation of mutationsList) { - for (const target of mutation.addedNodes) { - if (target.nodeType != 1) return - target.querySelectorAll('.List-item, .Card.AnswerCard').forEach(function(item){ - let item1 = item.querySelector('.ContentItem.AnswerItem'); - if (item1) { - menu_value('menu_customBlockUsers').forEach(function(item2){ // 遍历用户黑名单 - if (item1.dataset.zop.indexOf('authorName":"' + item2 + '",') > -1) { // 找到就删除该回答 - console.log(item1.dataset.zop) - item.hidden = true; - } - }) - } - }) - } - } - }; - - if (location.pathname.indexOf('/answer/') > -1) { // 回答页(就是只有三个回答的页面) - const observer = new MutationObserver(blockUsers_question_answer_); - observer.observe(document, { childList: true, subtree: true }); - } else { // 问题页(可以显示所有回答的页面) - const observer = new MutationObserver(blockUsers_question_); - observer.observe(document, { childList: true, subtree: true }); - } - - // 针对的是打开网页后直接加载的前面几个回答(上面哪些是针对动态加载的回答) - document.querySelectorAll('.List-item, .Card.AnswerCard').forEach(function(item){ - let item1 = item.querySelector('.ContentItem.AnswerItem'); - if (item1) { - menu_value('menu_customBlockUsers').forEach(function(item2){ // 遍历用户黑名单 - if (item1.dataset.zop.indexOf('authorName":"' + item2 + '",') > -1) { // 找到就删除该回答 - console.log(item1.dataset.zop) - item.hidden = true; - } - }) - } - }) - } - - function blockUsers_search() { - function blockUsers_now() { - if (location.search.indexOf('type=content') === -1) return // 目前只支持搜索页的 [综合] - document.querySelectorAll('.Card.SearchResult-Card[data-za-detail-view-path-module="AnswerItem"], .Card.SearchResult-Card[data-za-detail-view-path-module="PostItem"]').forEach(function(item1){ - let item = item1.querySelector('.RichText.ztext.CopyrightRichText-richText b'); // 标题所在元素 - if (item) { - for (const keyword of menu_value('menu_customBlockUsers')) { // 遍历关键词黑名单 - if (item.textContent === keyword) { // 找到就删除该信息流 - console.log(item.textContent); - item1.hidden = true; - break; - } - } - } - }) - } - - setTimeout(blockUsers_now, 500); - window.addEventListener('locationchange', function(){ - setTimeout(blockUsers_now, 500); // 网页 URL 变化后再次执行 - }) - - const callback = (mutationsList, observer) => { - if (location.search.indexOf('type=content') === -1) return // 目前只支持搜索页的 [综合] - for (const mutation of mutationsList) { - for (const target of mutation.addedNodes) { - if (target.nodeType != 1) return - if (target.className === 'Card SearchResult-Card' && (target.dataset.zaDetailViewPathModule === 'AnswerItem' || target.dataset.zaDetailViewPathModule === 'PostItem')) { - let item = target.querySelector('.RichText.ztext.CopyrightRichText-richText b'); // 用户名所在元素 - if (item) { - for (const keyword of menu_value('menu_customBlockUsers')) { // 遍历用户名黑名单 - if (item.textContent === keyword) { // 找到就删除该信息流 - console.log(item.textContent); - target.hidden = true; - break; - } - } - } - } - } - } - }; - const observer = new MutationObserver(callback); - observer.observe(document, { childList: true, subtree: true }); - } - - function blockUsers_comment() { - const callback = (mutationsList, observer) => { - for (const mutation of mutationsList) { - for (const target of mutation.addedNodes) { - if (target.nodeType != 1) return - let item = target.querySelector('img.Avatar.UserLink-avatar') - if (item) { - menu_value('menu_customBlockUsers').forEach(function(item1){ // 遍历用户黑名单 - if (item.alt === item1) { // 找到就删除该搜索结果 - if (findParentElement(item, 'NestComment--rootComment', true)) { - findParentElement(item, 'NestComment--rootComment', true).hidden = true;; - } else if (findParentElement(item, 'NestComment--child', true)){ - findParentElement(item, 'NestComment--child', true).hidden = true;; - } else if (findParentElement(item, 'NestComment', true)){ - findParentElement(item, 'NestComment', true).hidden = true;; - } else if (findParentElement(item, 'CommentItemV2', true)){ - findParentElement(item, 'CommentItemV2', true).hidden = true;; - } else if (findParentElement(item, 'CommentItemV2 CommentItemV2--highlighted', true)){ - findParentElement(item, 'CommentItemV2 CommentItemV2--highlighted', true).hidden = true;; - } - } - }) - - // 添加屏蔽用户按钮(点赞、回复等按钮后面) - if (item) { - let footer = findParentElement(item, 'CommentItemV2-meta', true).parentElement.querySelector('.CommentItemV2-metaSibling > .CommentItemV2-footer'), - userid = item.parentElement; - if (userid && footer && !footer.lastElementChild.dataset.name) { - userid = userid.href.split('/')[4]; - footer.insertAdjacentHTML('beforeend',``); - footer.lastElementChild.onclick = function(){blockUsers_button_add(this.dataset.name, this.dataset.userid, false)} - } - } - } - } - } - }; - const observer = new MutationObserver(callback); - observer.observe(document, { childList: true, subtree: true }); - } - - // 添加屏蔽用户按钮(用户信息悬浮框中) - function blockUsers_button() { - const callback = (mutationsList, observer) => { - for (const mutation of mutationsList) { - for (const target of mutation.addedNodes) { - if (target.nodeType != 1) return - //console.log(target, target.className) - if (target.className && (target.className.indexOf('Popover-content Popover-content--top HoverCard-popoverTarget') > -1 || target.className.indexOf('Popover-content Popover-content--bottom HoverCard-popoverTarget') > -1) || target.querySelector('.Popover-content.Popover-content--top.HoverCard-popoverTarget') || target.querySelector('.Popover-content.Popover-content--bottom.HoverCard-popoverTarget')) { - let item = target.querySelector('.MemberButtonGroup.ProfileButtonGroup.HoverCard-buttons'), - item1 = target.querySelector('a.UserLink-link'), - name = item1.textContent, - userid = item1.href.split('/')[4]; - 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)} - } - } - } - } - }; - const observer = new MutationObserver(callback); - observer.observe(document, { childList: true, subtree: true }); - } - - // 添加屏蔽用户按钮(用户主页) - function blockUsers_button_people() { - let item = document.querySelector('.MemberButtonGroup.ProfileButtonGroup.ProfileHeader-buttons'), // 获取按钮元素位置 - name = document.querySelector('.ProfileHeader-name').firstChild.textContent, // 获取用户名 - users = menu_value('menu_customBlockUsers'), // 读取屏蔽列表 - userid = location.href.split('/')[4]; - for (let num = 0;num