mebuki-thread-favicon

めぶきちゃんねるの各スレにてそのスレッド画像をfaviconに設定します

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         mebuki-thread-favicon
// @namespace    https://mebuki.moe/
// @version      0.1.2
// @description  めぶきちゃんねるの各スレにてそのスレッド画像をfaviconに設定します
// @author       ame-chan
// @match        https://mebuki.moe/app*
// @license      MIT
// @run-at       document-idle
// @require      https://update.greasyfork.org/scripts/552225/1688013/mebuki-page-state.js
// ==/UserScript==
(async () => {
  'use strict';
  if (typeof window.USER_SCRIPT_MEBUKI_STATE === 'undefined') {
    return;
  }
  const { subscribe, getState } = window.USER_SCRIPT_MEBUKI_STATE;
  let defaultFavicon = '';
  let currentFavicon = '';
  const getThumbnailElm = () => document.querySelector('.thread-messages > [id^="message-"] .pspw-item img');
  const createFavionElm = () => {
    const iconElm = document.querySelector('link[rel="icon"]');
    const thumbnailElm = getThumbnailElm();
    if (!(thumbnailElm instanceof HTMLImageElement) || currentFavicon === thumbnailElm.src) {
      return;
    }
    if (iconElm instanceof HTMLLinkElement) {
      defaultFavicon = iconElm.href;
      iconElm.href = thumbnailElm.src;
    } else {
      const link = document.createElement('link');
      link.rel = 'icon';
      link.type = 'image/jpeg';
      link.href = thumbnailElm.src;
      link.id = 'userjs-mebuki-favicon';
      document.head.insertAdjacentElement('afterbegin', link);
    }
    currentFavicon = thumbnailElm.src;
  };
  const deleteFaviconElm = () => {
    const userjsFaviconElm = document.querySelector('#userjs-mebuki-favicon');
    if (userjsFaviconElm instanceof HTMLLinkElement) {
      userjsFaviconElm.href = 'https://mebuki.moe/symbol/mebuki.png';
    } else {
      const iconElm = document.querySelector('link[rel="icon"]');
      if (iconElm instanceof HTMLLinkElement) {
        iconElm.href = defaultFavicon;
      }
    }
  };
  subscribe((state) => {
    if (state.isThreadPage) {
      createFavionElm();
    } else if (state.isCatalogPage) {
      deleteFaviconElm();
    }
  });
  if (getState().isThreadPage) {
    createFavionElm();
  }
})();