张麦麦

我的知乎优化方案(Web & APP)

· 7min· 技术·#UserScript#JavaScript

我已经使用知乎 7 年多了。最开始我一直在平板上用浏览器刷知乎,后来才开始使用 APP。现在来看,很多地方都用着非常别扭。因此不可避免地要借助一些第三方工具对知乎的使用进行优化。本篇文章提供了一些思路,例如屏蔽盐选和视频,增强一些小功能。主要针对 Web 端的知乎。

Web

这里先明确一下,对于屏蔽/删除页面元素,我尽量能用 uBlock 之类的插件则用之。因为它们具有更强的通用性与性能。因此部分可以使用油猴脚本实现的功能,我可能会用 uBlock 规则来实现。

屏蔽视频

真心不想在知乎上看视频,特别是知乎推出了一系列视频奖励政策以来,许多营销号都来薅羊毛,因此知乎的视频质量反而非常的差,再加上他提供了一键营销号生成器🤮。

以下是两个 uBlock 规则。他们分别删除含视频的回答以及纯视频。

1
! 普通视频
2
www.zhihu.com##.Card:has(.ZVideoItem):remove()
3
! 含视频的回答
4
www.zhihu.com##.Card:has(.VideoAnswerPlayer):remove()

清除活动主题

每次一有什么活动的时候,一进知乎首页就会弹出一个大大的 banner,体验直线下降。通过研究发现知乎的初始化信息在一个 id 为 js-initialDatascript 标签中。这里我实现了一个简单的 hook 来替换 document.getElementById。来对其中的数据进行修改,以清除活动主题。

不过这个方法并不完美,每次都会在页面载入后才能改好,可能是 hook 的位置不对,或者其他原因,不过目前姑且这样用着。 需要注意的是,事实上这个 banner 是能用 uBlock 进行删除的,但是删除后他的配色仍旧是活动主题的配色,这样会显得比较突兀。

所以这里结合 uBlock 和油猴脚本,先删除对应元素,防止进入页面的一瞬间看到 banner 碍眼。再通过 hook 清除活动主题来恢复正常配色。

1
// ==UserScript==
2
// @name zhihu-hook
3
// @namespace https://zhangmaimai.com
4
// @version 0.0.0
5
// @author maxchang3
6
// @icon https://www.zhihu.com/favicon.ico
7
// @match https://www.zhihu.com/
8
// @run-at document-start
9
// ==/UserScript==
10
11
(function () {
12
'use strict';
13
const getElementById = document.getElementById;
14
const applyHandler = (target, thisArg, args) => {
15
const [elementId] = args;
16
if (elementId !== "js-initialData") return Reflect.apply(target, thisArg, args);
17
const el = Reflect.apply(target, thisArg, args);
18
if (!el) return el;
19
const data = JSON.parse(el.innerText);
20
data.initialState.topstory.commercialBanner = {
21
show: false,
22
banner: [],
23
trackData: {}
24
};
25
data.initialState.env.appHeaderTheme.current = "normal";
26
data.initialState.env.appHeaderTheme.disable = true;
27
el.innerText = JSON.stringify(data);
28
return Reflect.apply(target, thisArg, args);
29
};
30
const setupHook = () => {
31
document.getElementById = new Proxy(getElementById, { apply: applyHandler });
32
};
33
setupHook();
34
})();
1
! 隐藏活动主题 banner
2
! 选中 .TopStory 下的非 .Topstory-container 元素
3
www.zhihu.com##.Topstory > :not(.Topstory-container):first-of-type

这个 hook 的应用场景还有非常大的想象空间的,不过由于目前时间有限,所以暂时只实现了一点功能。另外,由于使用 vite-plugin-monkey 配合 TypeScript 开发的,实际额外写了类型定义,开发体验还是很好的。不过目前就只放出单独的文件了,后面添加更多的功能的时候再完整放到 GitHub 上。

屏蔽盐选

暂时推荐使用下面的脚本。

美化与增强

这部分推荐一些好用的油猴脚本来美化和增强知乎。

知乎增强

许多知乎的营销号内容,都是以提问式的标题,打开后是一个文章,这点挺让人恼火的。

知乎增强 就提供了一个功能,可以增加样式以区分文章和回答。当然,他还有非常多的功能:

移除登录弹窗、屏蔽首页视频、默认收起回答、快捷收起回答/评论(左键两侧)、快捷回到顶部(右键两侧)、屏蔽用户、屏蔽关键词、移除高亮链接、屏蔽盐选内容/热榜杂项、净化搜索热门、净化标题消息、展开问题描述、显示问题作者、置顶显示时间、完整问题时间、区分问题文章、直达问题按钮、默认高清原图、默认站外直链。

当然作者还有另一个脚本 知乎美化

知乎历史记录

知乎的 Web 端并没有提供历史记录的信息。当你一不小心刷新的时候,可能正在看的问题──想要看的问题,就再也找不到了。

知乎历史记录 为 Web 端知乎提供了历史记录功能,当然目前只能记录首页的内容,不过这样基本就够用了。

咦,这是谁写的呀? 嗨呀原来是我自己呀(

TODO

未来想写一个类似于 Bilibili 旧播放页 的脚本,来实现复古的知乎主题。先立个 flag 吧。

APP

移动端想做一些修改的门槛高了很多,但是也更有趣了(笑)。

Android

隆重推荐 Zhiliao,可以说几乎满足了我对理想的知乎 APP 的需求。

他的功能非常丰富,包括:

去启动页广告、去信息流广告、去回答列表广告、去评论广告、去分享广告、去回答底部广告、去搜索广告、过滤视频、过滤文章、去信息流会员推荐、去回答圈子、去商品推荐、去相关搜索、去关键字搜索、直接打开外部链接、禁止切换色彩模式、显示卡片类别、状态栏沉浸、解锁第三方登录、移除直播按钮、不显示小红点、隐藏会员卡片、隐藏会员按钮、隐藏视频按钮、隐藏关注按钮、隐藏发布按钮、隐藏热点通知、精简文章页面、禁用活动主题、隐藏导航栏突起、左右划切换回答、移除下一个回答按钮、自定义过滤、注入JS脚本、清理临时文件

iOS

iOS 在不越狱的情况下几乎不可能对 APP 做出一些修改。不过有一种取巧的思路,也是目前比较通行的思路,就是利用代理工具进行中间人攻击从而注入、修改、拦截请求。当然,这能做到的效果肯定也是比较有限的,比较主要的功能就是拦截广告、过滤信息、做一些自动化脚本。但一些主题靠动态下发的 APP 甚至可以改变 UI (如:知乎的活动主题、哔哩哔哩的底边栏主题)。也形成了不错的生态和社区。

此处推荐一个比较好用的脚本:哲也同学。不过能做到的效果肯定没有 ZhiLiao 那么强大了。