steampy 游戏详情界面 steam 商店链接 div 替换为 a

steampy Game Details Interface steam Store link div replaced with a

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name        steampy 游戏详情界面 steam 商店链接 div 替换为 a
// @namespace   https://github.com/Yanren1225/steampy-cdkdetail-store-link-replacer
// @match       https://steampy.com/cdkDetail
// @homepageURL https://github.com/Yanren1225/steampy-cdkdetail-store-link-replacer
// @supportURL  https://github.com/Yanren1225/steampy-cdkdetail-store-link-replacer/issues
// @version     0.1.0
// @author      Yanren
// @modified    2023-06-25
// *run-at document-end
// @description steampy Game Details Interface steam Store link div replaced with a
// ==/UserScript==

(function () {
  "use strict";

  const observer = new MutationObserver(function (mutations) {
    mutations.forEach(function (mutation) {
      if (!mutation.addedNodes) return;

      for (let i = 0; i < mutation.addedNodes.length; i++) {
        const node = mutation.addedNodes[i];
        if (node.nodeType !== 1) continue;

        const nodesList = Array.from(node.querySelectorAll("div"));
        const nodeIndex = nodesList.findIndex((item) => {
          return item.innerText.indexOf("https://store.steampowered.com") === 0;
        });

        if (nodeIndex > -1) {
          const targetNode = nodesList[nodeIndex];
          const text = targetNode.textContent;
          const href = targetNode.textContent.trim();
          const classList = targetNode.classList;
          const anchorElement = document.createElement("a");
          anchorElement.href = href;
          anchorElement.text = text;
          anchorElement.classList = classList;
          targetNode.parentNode.replaceChild(anchorElement, targetNode);
          return;
        }
      }
    });
  });

  observer.observe(document.body, {
    childList: true,
    subtree: true,
  });
})();