mebuki-thread-favicon

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

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

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

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

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

您需要先安装一款用户脚本管理器扩展,例如 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();
  }
})();