Greasy Fork

Greasy Fork is available in English.

B站搜索页去除小火箭推广视频,播放页点击A键网页全屏,关闭adblock检测警告,禁止直播页面p2p上传;游民星空手机新闻页去广告。

repository: https://github.com/zhulibo/webpage-customize

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         B站搜索页去除小火箭推广视频,播放页点击A键网页全屏,关闭adblock检测警告,禁止直播页面p2p上传;游民星空手机新闻页去广告。
// @namespace    http://tampermonkey.net/
// @version      1.25
// @description  repository: https://github.com/zhulibo/webpage-customize
// @author       zhu
// @match        *.bilibili.com/*
// @match        *://wap.gamersky.com/news/*
// @match        *://outlook.live.com/*
// @icon         https://www.w3.org/2008/site/images/favicon.ico
// @grant        none
// @run-at       document-start
// @license      MIT
// ==/UserScript==

// js-fragment


/**
 * Load style by code or url
 *
 * @param css - The style code or url.
 */
function loadStyle(css) {
    if (css.indexOf('http') === 0) {
        const link = document.createElement('link');
        link.type = 'text/css';
        link.rel = 'stylesheet';
        link.href = css;
        document.head.appendChild(link);
    }
    else {
        const style = document.createElement('style');
        style.appendChild(document.createTextNode(css));
        document.head.appendChild(style);
    }
}

/**
 * Throttle a function.
 *
 * @param {Function} fn The function to throttle.
 * @param {number} [delay=200] The number of milliseconds to delay.
 * @param {boolean} [immediate=true] Invoke immediately.
 * @returns {Function} The new throttled function.
 * @returns {Function.cancel} Cancel throttle.
 */
function throttle(fn, delay = 200, immediate = true) {
    let lastCallTime = null;
    // 追加fn调用的定时器
    let addedCallTimeout = null;
    const _throttle = function (...args) {
        const now = Date.now();
        // 立即执行
        if (immediate) {
            if (!lastCallTime) {
                fn.apply(this, args);
                lastCallTime = now;
            }
            else if (now - lastCallTime >= delay) {
                fn.apply(this, args);
                lastCallTime = now;
            }
        }
        // 非立即执行
        else {
            if (!lastCallTime) {
                lastCallTime = now;
                // 用定时器追加一次fn调用,防止未达到最小时间间隔fn未被调起
                addedCallTimeout = setTimeout(() => {
                    fn.apply(this, args);
                    lastCallTime = Date.now();
                }, delay);
            }
            else if (now - lastCallTime >= delay) {
                fn.apply(this, args);
                lastCallTime = now;
                // 达到最小时间间隔fn调用成功,则清除追加的fn调用
                if (addedCallTimeout) {
                    clearTimeout(addedCallTimeout);
                }
            }
        }
    };
    // 取消节流
    _throttle.cancel = () => {
        if (addedCallTimeout)
            clearTimeout(addedCallTimeout);
        lastCallTime = null;
    };
    return _throttle;
}

// 哔哩哔哩
function bilibili () {
  function fn1() {
    {
      // 隐藏检测adblock警告
      loadStyle('.adblock-tips{max-height: 0}');
    }

    {
      // 首页样式调整
      loadStyle(
        '.container .recommended-swipe{' +
        'display: none !important;' +
        '}' +
        '.container> div{' +
        'margin-top: 0px !important;' +
        '}' +
        '.bili-video-card:has(.ad-feedback-entry){' +
        'display: none !important;' +
        '}'
      );
    }
  }

  function fn2() {
    {
      // 监听键盘a键,切换网页全屏
      document.addEventListener('keydown', (e) => {
        // 排除文字输入状态
        if (e.target.tagName === 'INPUT' || e.target.tagName === 'TEXTAREA') {
          return
        }
        if (e.keyCode === 65) {
          document.querySelector('.bpx-player-ctrl-web').click();
        }
      });
    }
  }

  if (location.href.match('://www.bilibili.com/') || location.href.match('://search.bilibili.com/')){
    document.addEventListener('DOMContentLoaded',function(){
      fn1();
    });


    window.addEventListener('load',function(){
      fn1(); // 未监听到DOMContentLoaded降级处理
      fn2();
    });
  }

  // 禁止直播页面p2p上传
  if (location.href.match('://live.bilibili.com/')){
    delete window.RTCPeerConnection;
    delete window.mozRTCPeerConnection;
    delete window.webkitRTCPeerConnection;
  }
}

// 游民星空
function gamersky () {

  // 新闻列表页
  if(location.href.match(/:\/\/wap.gamersky.com\/news\/$/)){
    document.addEventListener('DOMContentLoaded',function(){
      {
        // 去除一些页面元素
        let items = [
          '.ymw-header2019', // 顶部下载App
          '#gsTgWapTop', // 顶部广告
        ];
        for (let i = 0; i < items.length; i++) {
          let node = document.querySelectorAll(items[i]);
          if(node && node.length > 0) {
            console.log('已触发 ' + items[i]);
            for (let i = 0; i < node.length; i++) {
              node[i].remove();
            }
          }
        }
      }

      {
        // 触底自动加载更多
        let handle = throttle(loadData, 100);
        window.addEventListener('scroll', handle);
        function loadData() {
          let clientHeight = document.documentElement.clientHeight;
          let scrollHeight = document.documentElement.scrollHeight;
          let scrollTop = document.documentElement.scrollTop;
          if (scrollTop + clientHeight >= scrollHeight - 100) {
            let node = document.querySelector('.ymw-more');
            let event = new Event('touchend');
            console.log('已触发 ' + '.ymw-more');
            if(node) node.dispatchEvent(event);
          }
        }
      }

    });
  }

  // 新闻详情页
  if(location.href.match(/:\/\/wap.gamersky.com\/news\/.+$/)) {
    document.addEventListener('DOMContentLoaded',function() {
      {
        // 新闻页去除一些页面元素
        let items = [
          '.ymwBootDownload', // 顶部顶部下载App
          '#gsTgWapTop', // 顶部广告
          '.gsTgWapConBdshareTopBox', // 打开游民APP,查看更多精彩内容
          '.ymw-rel-list', // app精彩推荐
          '.ymw-hot-h5-game', // 热门h5手游
          '#gsTgWapConBdshareTop', // 底部广告
        ];
        for (let i = 0; i < items.length; i++) {
          let node = document.querySelectorAll(items[i]);
          if (node && node.length > 0) {
            console.log('已触发 ' + items[i]);
            for (let i = 0; i < node.length; i++) {
              node[i].remove();
            }
          }
        }
      }

      {
        // 修改内容上边距
        let node = document.querySelector('.ymwContxt');
        if (node) {
          console.log('已触发 ' + '.ymwContxt');
          node.style.paddingTop = '.4rem';
        }
      }

      {
        // 文章自动展开
        let node = document.querySelector('#gsAreaContextOpen');
        if (node) {
          console.log('已触发 ' + '#gsAreaContextOpen');
          node.click();
        }
      }

      {
        // 防止查找.ymw-rel-mgame报错
        const element = document.createElement('div');
        element.className = 'ymw-rel-mgame';
        document.body.append(element);
      }

      {
        // 去除打开App阅读体验更佳,攻略、资讯实时更新
        let node = document.querySelector('.ymw-footer');
        if (node) {
          console.log('已触发 ' + '.ymw-footer');
          node.remove();
        }
      }

    });

    window.addEventListener('load',function(){
      {
        // 去除打开游民APP,查看xx条精彩评论
        let node = document.querySelector('#SOHUCS > a');
        if (node) {
          console.log('已触发 ' + '#SOHUCS > a');
          node.remove();
        }
      }

      {
        // 去除评论上方的广告
        let node = document.querySelector('#gsTgWapConBdshareTop + div');
        if (node) {
          console.log('已触发 ' + '#gsTgWapConBdshareTop + div');
          node.remove();
        }
      }

    });

  }

}

function outlook () {
  if(location.href.match('://outlook.live.com/')){
    document.addEventListener('DOMContentLoaded',function(){
      // 关闭左侧栏
      {
        loadStyle('.QVF0n {display: none!important}');
      }

    });
  }
}

const href = location.href;

// 不用if else防止跳转误判
if(href.match('.bilibili.com/')) {
  bilibili();
}
if(href.match('://wap.gamersky.com/news/')) {
  gamersky();
}
if(href.match('://outlook.live.com/')) {
  outlook();
}