Skip to content

Commit fac909c

Browse files
committed
新增 [屏蔽低赞/低评回答] 功能
1 parent 4bf2679 commit fac909c

1 file changed

Lines changed: 86 additions & 4 deletions

File tree

Zhihu-Enhanced.user.js

Lines changed: 86 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
// @name:zh-CN 知乎增强
44
// @name:zh-TW 知乎增強
55
// @name:ru Улучшение Zhihu
6-
// @version 2.3.16
6+
// @version 2.3.17
77
// @author X.I.U
88
// @description A more personalized Zhihu experience~
9-
// @description:zh-CN 移除登录弹窗、屏蔽指定类别(视频、盐选、文章、想法、关注[赞同/关注了XX]等)、屏蔽用户、屏蔽关键词、默认收起回答、快捷收起回答/评论(左键两侧)、快捷回到顶部(右键两侧)、区分问题文章、移除高亮链接、净化搜索热门、净化标题消息、展开问题描述、显示问题作者、默认高清原图(无水印)、置顶显示时间、完整问题时间、直达问题按钮、默认站外直链...
10-
// @description:zh-TW 移除登錄彈窗、屏蔽指定類別(視頻、鹽選、文章、想法、關注[贊同/關注了XX]等)、屏蔽用戶、屏蔽關鍵詞、默認收起回答、快捷收起回答/評論、快捷回到頂部、區分問題文章、移除高亮鏈接、默認高清原圖(無水印)、默認站外直鏈...
9+
// @description:zh-CN 移除登录弹窗、屏蔽指定类别(视频、盐选、文章、想法、关注[赞同/关注了XX]等)、屏蔽低赞/低评回答、屏蔽用户、屏蔽关键词、默认收起回答、快捷收起回答/评论(左键两侧)、快捷回到顶部(右键两侧)、区分问题文章、移除高亮链接、净化搜索热门、净化标题消息、展开问题描述、显示问题作者、默认高清原图(无水印)、置顶显示时间、完整问题时间、直达问题按钮、默认站外直链...
10+
// @description:zh-TW 移除登錄彈窗、屏蔽指定類別(視頻、鹽選、文章、想法、關注[贊同/關注了XX]等)、屏蔽低贊/低評回答、屏蔽用戶、屏蔽關鍵詞、默認收起回答、快捷收起回答/評論、快捷回到頂部、區分問題文章、移除高亮鏈接、默認高清原圖(無水印)、默認站外直鏈...
1111
// @description:ru Более персонализированный опыт пользования сайтом Zhihu~
1212
// @match *://www.zhihu.com/*
1313
// @match *://zhuanlan.zhihu.com/*
@@ -36,6 +36,8 @@ var menu_ALL = [
3636
['menu_collapsedAnswer', '一键收起回答/评论', '一键收起回答/评论', true],
3737
['menu_collapsedNowAnswer', '快捷收起回答/评论 (点击两侧空白处)', '快捷收起回答/评论', true],
3838
['menu_backToTop', '快捷回到顶部 (右键两侧空白处)', '快捷回到顶部', true],
39+
['menu_blockLowUpvoteCount', '屏蔽低赞回答', '屏蔽低赞回答', ''],
40+
['menu_blockLowCommentCount', '屏蔽低评回答', '屏蔽低评回答', ''],
3941
['menu_blockUsers', '屏蔽指定用户', '屏蔽指定用户', true],
4042
['menu_customBlockUsers', '自定义屏蔽用户', '自定义屏蔽用户', ['故事档案局', '盐选推荐', '盐选科普', '盐选成长计划', '知乎盐选会员', '知乎盐选创作者', '盐选心理', '盐选健康必修课', '盐选奇妙物语', '盐选生活馆', '盐选职场', '盐选文学甄选', '盐选作者小管家', '盐选博物馆', '盐选点金', '盐选测评室', '盐选科技前沿', '盐选会员精品']],
4143
['menu_blockKeywords', '屏蔽指定关键词', '屏蔽指定关键词', true],
@@ -73,7 +75,11 @@ function registerMenuCommand() {
7375
}
7476
for (let i=0;i<menu_ALL.length;i++){ // 循环注册脚本菜单
7577
menu_ALL[i][3] = GM_getValue(menu_ALL[i][0]);
76-
if (menu_ALL[i][0] === 'menu_customBlockUsers') { // 只有 [屏蔽指定用户] 启用时,才注册菜单 [自定义屏蔽用户]
78+
if (menu_ALL[i][0] === 'menu_blockLowUpvoteCount') {
79+
menu_ID[i] = GM_registerMenuCommand(`#️⃣ ${menu_ALL[i][1]}`, function(){customBlockLowCount(menu_ALL[i][0],'设置要屏蔽 低于多少赞同 的回答?\n(例如设置 50 则赞同数低于 50 的回答会被屏蔽\n(目前该功能适用于 首页信息流、问题页\n(点击 [确定] 修改后,后续加载的回答会立即生效,不影响当前已有\n(如不需要请留空并直接点击 [确定] 即可')});
80+
} else if (menu_ALL[i][0] === 'menu_blockLowCommentCount') {
81+
menu_ID[i] = GM_registerMenuCommand(`#️⃣ ${menu_ALL[i][1]}`, function(){customBlockLowCount(menu_ALL[i][0],'设置要屏蔽 低于多少评价 的回答?\n(例如设置 20 则评价数低于 20 的回答会被屏蔽\n(目前该功能适用于 首页信息流、问题页\n(点击 [确定] 修改后,后续加载的回答会立即生效,不影响当前已有\n(如不需要请留空并直接点击 [确定] 即可')});
82+
} else if (menu_ALL[i][0] === 'menu_customBlockUsers') { // 只有 [屏蔽指定用户] 启用时,才注册菜单 [自定义屏蔽用户]
7783
if (menu_value('menu_blockUsers')) menu_ID[i] = GM_registerMenuCommand(`#️⃣ ${menu_ALL[i][1]}`, function(){customBlockUsers()});
7884
} else if (menu_ALL[i][0] === 'menu_customBlockKeywords') { // 只有 [屏蔽指定关键词] 启用时,才注册菜单 [自定义屏蔽关键词]
7985
if (menu_value('menu_blockKeywords')) menu_ID[i] = GM_registerMenuCommand(`#️⃣ ${menu_ALL[i][1]}`, function(){customBlockKeywords()});
@@ -423,6 +429,78 @@ function isElementInViewport_(el) {
423429
}
424430

425431

432+
// 自定义屏蔽低赞/低评回答
433+
function customBlockLowCount(menu, info) {
434+
let newCount = prompt(info, menu_value(menu));
435+
if (newCount == '' || /^(0|[1-9]\d*)$/.test(newCount)) { // 检查是否是有效整数
436+
GM_setValue(menu, newCount);
437+
registerMenuCommand(); // 重新注册脚本菜单
438+
}
439+
};
440+
441+
442+
// 屏蔽低赞/低评回答
443+
function blockLowCount(type) {
444+
switch(type) {
445+
case 'index':
446+
blockLowCount_('.Card.TopstoryItem.TopstoryItem-isRecommend', 'Card TopstoryItem TopstoryItem-isRecommend');
447+
break;
448+
case 'question':
449+
blockLowCount_('.List-item', 'List-item');
450+
break;
451+
}
452+
453+
454+
function blockLowCount_(className1, className2) {
455+
// 前几条因为是直接加载的,而不是动态插入网页的,所以需要单独判断
456+
function blockLowCount_now() {
457+
document.querySelectorAll(className1).forEach(function(item1){
458+
blockLowCount_1(item1,'menu_blockLowUpvoteCount','meta[itemprop=upvoteCount]');
459+
blockLowCount_1(item1,'menu_blockLowCommentCount','meta[itemprop=commentCount]');
460+
})
461+
}
462+
463+
blockLowCount_now();
464+
window.addEventListener('urlchange', function(){
465+
setTimeout(blockLowCount_now, 1000); // 网页 URL 变化后再次执行
466+
})
467+
468+
// 这个是监听网页插入事件,用来判断后续网页动态插入的元素
469+
const callback = (mutationsList, observer) => {
470+
for (const mutation of mutationsList) {
471+
for (const target of mutation.addedNodes) {
472+
if (target.nodeType != 1) return
473+
if (target.className === className2) {
474+
blockLowCount_1(target,'menu_blockLowUpvoteCount','meta[itemprop=upvoteCount]');
475+
blockLowCount_1(target,'menu_blockLowCommentCount','meta[itemprop=commentCount]');
476+
}
477+
}
478+
}
479+
};
480+
const observer = new MutationObserver(callback);
481+
observer.observe(document, { childList: true, subtree: true });
482+
}
483+
484+
485+
function blockLowCount_1(item1, menu, css) {
486+
if (menu_value(menu)) {
487+
let item = item1.querySelector(css);
488+
//console.log(item)
489+
if (item && item.content && Number(item.content) < Number(menu_value(menu))) {
490+
if (menu == 'menu_blockLowUpvoteCount') {
491+
console.log('已屏蔽低赞回答:', item.content + '<' + menu_value(menu), item1);
492+
} else {
493+
console.log('已屏蔽低评回答:', item.content + '<' + menu_value(menu), item1);
494+
}
495+
item1.hidden = true;
496+
item1.style.display = 'none';
497+
}
498+
}
499+
}
500+
}
501+
502+
503+
426504
// 自定义屏蔽用户
427505
function customBlockUsers() {
428506
let nowBlockUsers = '';
@@ -1551,6 +1629,9 @@ function blockHotOther() {
15511629
collapsedNowAnswer('.QuestionPage'); // 收起当前回答 + 快捷返回顶部
15521630
collapsedNowAnswer('.Question-main'); // 收起当前回答 + 快捷返回顶部
15531631
questionRichTextMore(); // 展开问题描述
1632+
if (location.pathname.indexOf('answer') == -1) { // 问题页而不是回答页
1633+
blockLowCount('question'); // 屏蔽低赞/低评回答
1634+
}
15541635
blockUsers('question'); // 屏蔽指定用户
15551636
blockYanXuan(); // 屏蔽盐选内容
15561637
blockType('question'); // 屏蔽指定类别(视频/文章等)
@@ -1629,6 +1710,7 @@ function blockHotOther() {
16291710
addTypeTips(); // 区分问题文章
16301711
addToQuestion(); // 直达问题按钮
16311712
if (location.pathname == '/') { // 推荐
1713+
blockLowCount('index'); // 屏蔽低赞/低评回答
16321714
blockUsers('index'); // 屏蔽指定用户
16331715
blockKeywords('index'); // 屏蔽指定关键词
16341716
blockType(); // 屏蔽指定类别(视频/文章等)

0 commit comments

Comments
 (0)