11// ==UserScript==
22// @name 知乎增强
3- // @version 1.3.6
3+ // @version 1.3.7
44// @author X.I.U
5- // @description 移除登录弹窗、一键收起回答、收起当前回答/评论(点击两侧空白处)、快捷回到顶部(右键两侧空白处)、置顶显示时间、显示问题时间、区分问题文章、默认高清原图、默认站外直链
5+ // @description 移除登录弹窗、一键收起回答、收起当前回答/评论(点击两侧空白处)、快捷回到顶部(右键两侧空白处)、屏蔽指定用户、屏蔽盐选内容、 置顶显示时间、显示问题时间、区分问题文章、默认高清原图、默认站外直链
66// @match *://www.zhihu.com/*
77// @match *://zhuanlan.zhihu.com/*
88// @icon https://static.zhihu.com/heifetz/favicon.ico
@@ -21,11 +21,13 @@ var menu_ALL = [
2121 [ 'menu_collapsedAnswer' , '一键收起回答' , '一键收起回答' , true ] ,
2222 [ 'menu_collapsedNowAnswer' , '收起当前回答/评论(点击两侧空白处)' , '收起当前回答/评论' , true ] ,
2323 [ 'menu_backToTop' , '快捷回到顶部(右键两侧空白处)' , '快捷回到顶部' , true ] ,
24+ [ 'menu_blockUsers' , '屏蔽指定用户(测试)' , '屏蔽指定用户' , false ] ,
25+ [ 'menu_blockYanXuan' , '屏蔽盐选内容' , '屏蔽盐选内容' , false ] ,
2426 [ 'menu_publishTop' , '置顶显示时间' , '置顶显示时间' , true ] ,
2527 [ 'menu_allTime' , '完整显示时间' , '完整显示时间' , true ] ,
2628 [ 'menu_typeTips' , '区分问题文章' , '区分问题文章' , true ] ,
2729 [ 'menu_directLink' , '默认站外直链' , '默认站外直链' , true ]
28- ] , menu_ID = [ ] ;
30+ ] , menu_ID = [ ] , blockUsersList = [ '故事档案局' , '盐选推荐' , '盐选科普' , '盐选成长计划' , '知乎盐选会员' , '知乎盐选创作者' , '盐选心理' , '盐选健康必修课' , '盐选奇妙物语' , '盐选生活馆' , '盐选职场' , '盐选文学甄选' , '盐选作者小管家' , '盐选博物馆' , '盐选点金' , '盐选测评室' , '盐选科技前沿' , '盐选会员精品' ] ;
2931for ( let i = 0 ; i < menu_ALL . length ; i ++ ) { // 如果读取到的值为 null 就写入默认值
3032 if ( GM_getValue ( menu_ALL [ i ] [ 0 ] ) == null ) { GM_setValue ( menu_ALL [ i ] [ 0 ] , menu_ALL [ i ] [ 3 ] ) } ;
3133}
@@ -185,6 +187,120 @@ function isElementInViewport(el) {
185187}
186188
187189
190+ // 屏蔽指定用户(测试)
191+ function blockUsers ( type ) {
192+ if ( ! menu_value ( 'menu_blockUsers' ) ) return
193+ switch ( type ) {
194+ case 'index' :
195+ blockUsers_index ( ) ;
196+ break ;
197+ case 'question' :
198+ blockUsers_question ( ) ;
199+ break ;
200+ case 'search' :
201+ blockUsers_search ( ) ;
202+ break ;
203+ }
204+
205+ function blockUsers_index ( ) {
206+ let blockUsers = e => {
207+ if ( e . target . innerHTML && e . target . getElementsByClassName ( 'Feed' ) . length > 0 ) {
208+ let item = e . target . getElementsByClassName ( 'Feed' ) [ 0 ] . getElementsByClassName ( 'ContentItem AnswerItem' ) [ 0 ] ; // 用户名所在元素
209+ if ( item ) {
210+ blockUsersList . forEach ( function ( item1 ) { // 遍历用户黑名单
211+ if ( item . dataset . zop . indexOf ( 'authorName":"' + item1 + '",' ) > - 1 ) { // 找到就删除该信息流
212+ console . log ( item . dataset . zop ) ;
213+ item . parentNode . parentNode . remove ( ) ;
214+ }
215+ } )
216+ }
217+ }
218+ }
219+ document . addEventListener ( 'DOMNodeInserted' , blockUsers ) ; // 监听插入事件
220+
221+ let listItem = document . getElementsByClassName ( 'Card TopstoryItem TopstoryItem--old TopstoryItem-isRecommend' ) ;
222+ Array . from ( listItem ) . forEach ( function ( item ) { // 遍历所有回答
223+ let listName = item . querySelector ( '.ContentItem.AnswerItem' ) // 用户名所在元素
224+ if ( listName ) {
225+ blockUsersList . forEach ( function ( item1 ) { // 遍历用户黑名单
226+ if ( listName . dataset . zop . indexOf ( 'authorName":"' + item1 + '",' ) > - 1 ) { // 找到就删除该信息流
227+ console . log ( listName . dataset . zop ) ;
228+ item . remove ( ) ;
229+ }
230+ } )
231+ }
232+ } )
233+ }
234+
235+ function blockUsers_question ( ) {
236+ let blockUsers = e => {
237+ if ( e . target . innerHTML && e . target . getElementsByClassName ( 'ContentItem AnswerItem' ) . length > 0 ) {
238+ let item = e . target . getElementsByClassName ( 'ContentItem AnswerItem' ) [ 0 ] ; // 用户名所在元素
239+ if ( item ) {
240+ blockUsersList . forEach ( function ( item1 ) { // 遍历用户黑名单
241+ if ( item . dataset . zop . indexOf ( 'authorName":"' + item1 + '",' ) > - 1 ) { // 找到就删除该回答
242+ console . log ( item . dataset . zop )
243+ item . parentNode . remove ( ) ;
244+ }
245+ } )
246+ }
247+ }
248+ }
249+ document . addEventListener ( 'DOMNodeInserted' , blockUsers ) ; // 监听插入事件
250+
251+ let listItem = document . getElementsByClassName ( 'ContentItem AnswerItem' ) ;
252+ Array . from ( listItem ) . forEach ( function ( item ) { // 遍历所有回答 // 用户名所在元素
253+ if ( item ) {
254+ blockUsersList . forEach ( function ( item1 ) { // 遍历用户黑名单
255+ if ( item . dataset . zop . indexOf ( 'authorName":"' + item1 + '",' ) > - 1 ) { // 找到就删除该回答
256+ console . log ( item . dataset . zop )
257+ item . parentNode . remove ( ) ;
258+ }
259+ } )
260+ }
261+ } )
262+ }
263+
264+ function blockUsers_search ( ) {
265+ let blockUsers = e => {
266+ if ( e . target . innerHTML && e . target . getElementsByClassName ( 'List-item' ) . length > 0 ) {
267+ let item = e . target . getElementsByClassName ( 'List-item' ) [ 0 ] ;
268+ let listName = item . querySelector ( '.RichText.ztext.CopyrightRichText-richText b' ) // 用户名所在元素
269+ if ( listName ) {
270+ blockUsersList . forEach ( function ( item1 ) { // 遍历用户黑名单
271+ if ( item1 === listName . innerText ) { // 找到就删除该搜索结果
272+ console . log ( listName . innerText ) ;
273+ item . parentNode . remove ( ) ;
274+ }
275+ } )
276+ }
277+ }
278+ }
279+ document . addEventListener ( 'DOMNodeInserted' , blockUsers ) ; // 监听插入事件
280+ }
281+ }
282+
283+
284+ // 屏蔽盐选内容
285+ function blockYanXuan ( ) {
286+ if ( ! menu_value ( 'menu_blockYanXuan' ) ) return
287+ let blockYanXuan = e => {
288+ if ( e . target . innerHTML && e . target . getElementsByClassName ( 'KfeCollection-PurchaseBtn-mask' ) . length > 0 ) {
289+ let item = e . target . getElementsByClassName ( 'KfeCollection-PurchaseBtn-mask' ) [ 0 ] ;
290+ item . parentNode . parentNode . parentNode . parentNode . parentNode . remove ( ) ;
291+ }
292+ }
293+ document . addEventListener ( 'DOMNodeInserted' , blockYanXuan ) ; // 监听插入事件
294+
295+ let listItem = document . getElementsByClassName ( 'List-item' ) ;
296+ Array . from ( listItem ) . forEach ( function ( item ) {
297+ if ( item . getElementsByClassName ( 'KfeCollection-PurchaseBtn-mask' ) . length > 0 ) {
298+ item . remove ( ) ;
299+ }
300+ } )
301+ }
302+
303+
188304var postNum ;
189305// 区分问题文章
190306function addTypeTips ( ) {
@@ -520,6 +636,8 @@ function questionInvitation(){
520636 collapsedAnswer ( ) ; // 一键收起回答
521637 collapsedNowAnswer ( ".QuestionPage" ) ; // 收起当前回答 + 快捷返回顶部
522638 collapsedNowAnswer ( ".Question-main" ) ; // 收起当前回答 + 快捷返回顶部
639+ blockUsers ( 'question' ) ;
640+ blockYanXuan ( ) ;
523641 }
524642 setInterval ( topTime_question , 300 ) ; // 置顶显示时间
525643 } else if ( window . location . href . indexOf ( "search" ) > - 1 ) { // 搜索结果页 //
@@ -528,6 +646,7 @@ function questionInvitation(){
528646 collapsedNowAnswer ( ".Search-container" ) ; // 收起当前回答 + 快捷返回顶部
529647 setInterval ( topTime_search , 300 ) ; // 置顶显示时间
530648 EventXMLHttpRequest ( ) ; // 区分问题文章
649+ blockUsers ( 'search' ) ;
531650 } else if ( window . location . href . indexOf ( "topic" ) > - 1 ) { // 话题页 //
532651 if ( window . location . href . indexOf ( "hot" ) > - 1 || window . location . href . indexOf ( "top-answers" ) > - 1 ) { // 仅限 [讨论] [精华]
533652 collapsedAnswer ( ) ; // 一键收起回答
@@ -555,5 +674,6 @@ function questionInvitation(){
555674 collapsedNowAnswer ( ".Topstory-container" ) ; // 收起当前回答 + 快捷返回顶部
556675 setInterval ( topTime_index , 300 ) ; // 置顶显示时间
557676 EventXMLHttpRequest ( ) ; // 区分问题文章
677+ blockUsers ( 'index' ) ;
558678 }
559679} ) ( ) ;
0 commit comments