Bilibili Old

Use old Bilibili home page and video page

目前為 2023-04-18 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

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

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name              Bilibili Old
// @name:zh-CN        旧版 Bilibili
// @version           0.2
// @description       Use old Bilibili home page and video page
// @description:zh-CN 使用旧版 Bilibili 主页和播放页
// @author            GForkMe.L
// @run-at            document-start
// @match             *://www.bilibili.com/*
// @grant             GM_registerMenuCommand
// @namespace https://greasyfork.org/users/12904
// ==/UserScript==

(function () {
  "use strict";

  const MAX_AGE = 60 * 60 * 24 * 365;
  const PLAYER_CONF = "bpx_player_profile";
  const SCRIPT_STAT = "bili_old_video";

  function updateStat({ no_v_autoplay, no_rcmv_autoplay, no_feeds, old_home, old_video }) {
    const STAT = { no_v_autoplay: 0, no_rcmv_autoplay: 0, no_feeds: 0, old_home: 0, old_video: 0 };
    Object.assign(STAT, JSON.parse(localStorage.getItem(SCRIPT_STAT)) ?? STAT);
    STAT.no_v_autoplay += no_v_autoplay ? 1 : 0;
    STAT.no_rcmv_autoplay += no_rcmv_autoplay ? 1 : 0;
    STAT.no_feeds += no_feeds ? 1 : 0;
    STAT.old_home += old_home ? 1 : 0;
    STAT.old_video += old_video ? 1 : 0;
    localStorage.setItem(SCRIPT_STAT, JSON.stringify(STAT));
  }
  function noVideoAutoplay() {
    const CONF = JSON.parse(localStorage.getItem(PLAYER_CONF)) ?? { media: { autoplay: false } };
    if (!CONF.media.autoplay) {
      CONF.media.autoplay = false;
      localStorage.setItem(PLAYER_CONF, JSON.stringify(CONF));
    }
    updateStat({ no_v_autoplay: true });
  }
  function noRcmAutoplay() {
    const CONF = JSON.parse(localStorage.getItem(PLAYER_CONF)) ?? { media: { handoff: 2 } };
    if (CONF.media.handoff != 2) {
      CONF.media.handoff = 2;
      localStorage.setItem(PLAYER_CONF, JSON.stringify(CONF));
    }
    if (localStorage.getItem("recommend_auto_play") !== "close") {
      localStorage.setItem("recommend_auto_play", "close");
    }
    updateStat({ no_rcmv_autoplay: true });
  }

  function noFeed() {
    document.cookie = "i-wanna-go-feeds=-1; path=/; max-age=" + MAX_AGE;
    updateStat({ no_feeds: true });
  }
  function oldHome(useOldHome = true) {
    if (!useOldHome) {
      document.cookie = "i-wanna-go-back=-1; domain=bilibili.com; path=/; max-age=" + MAX_AGE;
    } else {
      document.cookie = "i-wanna-go-back=2; domain=bilibili.com; path=/; max-age=" + MAX_AGE;
      updateStat({ old_home: true });
    }
  }
  function oldVideo() {
    document.cookie = "go_old_video=1; path=/; max-age=" + MAX_AGE;
    updateStat({ old_video: true });
  }

  // Use no feed bilibili homepage, old video page and stop autoplay.
  if (!document.cookie.includes("SESSDATA")) {
    if (!localStorage.getItem(SCRIPT_STAT)) {
      noFeed();
      noVideoAutoplay();
      noRcmAutoplay();
      oldVideo();
    }
  }

  // Context menu
  const mid0 = GM_registerMenuCommand("No Feed", () => {
    noFeed();
  });
  const mid1 = GM_registerMenuCommand("No Video and Recommend Autoplay", () => {
    noVideoAutoplay();
    noRcmAutoplay();
  });
  const mid2 = GM_registerMenuCommand("No Video Autoplay", () => {
    noVideoAutoplay();
  });
  const mid3 = GM_registerMenuCommand("No Recommend Autoplay", () => {
    noRcmAutoplay();
  });
  const mid4 = GM_registerMenuCommand("Old Homepage", () => {
    oldHome(true);
    // location.reload();
  });
  const mid5 = GM_registerMenuCommand("New Homepage", () => {
    oldHome(false);
    // location.reload();
  });
})();