Greasy Fork

Greasy Fork is available in English.

Quicker-显示用户头像

在讨论区等地方显示头像

当前为 2024-07-23 提交的版本,查看 最新版本

// ==UserScript==
// @name        Quicker-显示用户头像
// @version     1.5
// @description 在讨论区等地方显示头像
// @match       https://getquicker.net/*
// @icon          https://files.getquicker.net/_icons/5E5C8C35FDA9E28D6E35D9C7E4EAA498A6069306.png
// @grant       none
// @namespace http://greasyfork.icu/users/1082425
// ==/UserScript==

(function() {
  'use strict';

  function getAvatarImageSrc(uri) {
    var cachedData = localStorage.getItem(uri);
    if (cachedData) {
      var data = JSON.parse(cachedData);
      if (data.timestamp && Date.now() - data.timestamp < 24 * 60 * 60 * 1000) {
        return data.src;
      } else {
        localStorage.removeItem(uri); // 过期则释放缓存
      }
    }

    var xhr = new XMLHttpRequest();
    xhr.open('GET', uri, false);
    xhr.send();
    if (xhr.status === 200) {
      var htmlContent = xhr.responseText;
      var parser = new DOMParser();
      var doc = parser.parseFromString(htmlContent, 'text/html');
      var xpathResult = doc.evaluate('/html/body/div[1]/div/div[2]/h2/div[1]/img', doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
      var avatarImage = xpathResult.singleNodeValue;
      if (avatarImage) {
        var newData = {
          link: uri,
          src: avatarImage.src,
          timestamp: Date.now()
        };
        localStorage.setItem(uri, JSON.stringify(newData));

        return avatarImage.src;
      }
    }
    return null;
  }
var url = window.location.href;
var regex = /^https:\/\/getquicker\.net\/Sharedaction\?code=/i;
var isMatch = regex.test(url);

if (!isMatch) {
  var elements = document.querySelectorAll('.avatar');
  var userlinks = document.querySelectorAll('.username .user-link , .mb-1 .user-link');
  for (var i = 0; i < elements.length; i++) {
    var element = elements[i];
    var userlink = userlinks[i];

    var src = getAvatarImageSrc(userlink.href);
    if (!src) {
      continue;
    }

    var imgElement = document.createElement('img');
    var aElement = document.createElement('a');

    imgElement.src = src;
    imgElement.alt = 'Avatar';
    imgElement.style.borderRadius = '50%';

    var size = Math.min(parseInt(getComputedStyle(element).width), parseInt(getComputedStyle(element).height));
    imgElement.style.width = size + 'px';
    imgElement.style.height = size + 'px';

    aElement.href = userlink.href;
    aElement.style.width = getComputedStyle(element).width;
    aElement.style.height = getComputedStyle(element).height;
    aElement.target = '_blank';
    aElement.appendChild(imgElement);

    element.parentNode.replaceChild(aElement, element);
  }
}
})();