Greasy Fork

Greasy Fork is available in English.

知乎去广告、视频

a script to remove ads in www.zhihu.com

当前为 2023-01-09 提交的版本,查看 最新版本

// ==UserScript==
// @name           知乎去广告、视频
// @namespace   http://tampermonkey.net/
// @version         1.4
// @description   a script to remove ads in www.zhihu.com
// @author          CoderBen
// @match          https://www.zhihu.com/*
// @grant           none
// @icon            https://tse2-mm.cn.bing.net/th/id/OIP.7D-LqgunUUDXVESZYas8GAHaHa?pid=Api&rs=1
// ==/UserScript==

(function() {
    'use strict';

    if (window.location.href.indexOf('/people/') > -1) return

    try {
        removeHomeBar()
        removeAds()
        removeMovies()
    
        window.onscroll = throttle(function() {
            removeAds()
            removeMovies()
        }, 1000)   
    } catch (e) {
        console.error('【知乎去广告、视频】:出现错误', e)
    }

    function removeAds () {
        document.querySelectorAll('.TopstoryItem--advertCard').forEach(function(elem) {
            elem.style.display = 'none'
        })
        document.querySelectorAll('.Pc-card').forEach(function(elem) {
            elem.style.display = 'none'
        })
    }

    function removeMovies() {
        document.querySelector('.ZVideoItem').parentElement.parentElement.parentElement.parentElement.remove()
        document.querySelector('.VideoAnswerPlayer').parentElement.parentElement.parentElement.parentElement.parentElement.remove()   
    }

    function removeHomeBar() {
        document.querySelector('.Topstory-container') && 
        document.querySelector('.Topstory-container').previousSibling &&
        document.querySelector('.Topstory-container').previousSibling.remove()
    }

    function throttle(func, delay) {
       let last;
       return function () {
           const _this = this;
           const _args = arguments;
           const now = +new Date();
           if (last && now < last + delay) {
               clearTimeout(func.tid);
               func.tid = setTimeout(function () {
                   last = now;
                   func.call(_this, [..._args]);
               }, delay);
           } else {
               last = now;
               func.call(_this, [..._args]);
           }
       }
   }

})();