您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Add hyperlink to the other editions in playstation store
// ==UserScript== // @name Links for Game Editions in PlayStation Store // @namespace https://github.com/rod24574575 // @description Add hyperlink to the other editions in playstation store // @version 1.1.0 // @license MIT // @author rod24574575 // @homepage https://github.com/rod24574575/PsStoreEditionLink // @homepageURL https://github.com/rod24574575/PsStoreEditionLink // @supportURL https://github.com/rod24574575/PsStoreEditionLink/issues // @match *://store.playstation.com/*/product/* // @match *://store.playstation.com/*/concept/* // @match *://www.playstation.com/*/games/* // @run-at document-idle // ==/UserScript== // @ts-check 'use strict'; (function() { function run() { /** * @param {string} trackString * @returns {string | null} */ function findSkuId(trackString) { /** @type {string} */ let rawSku; try { const track = JSON.parse(trackString); if (!track || typeof track !== 'object') { return null; } const sku = track?.attributes?.sku; if (typeof sku !== 'string') { return null; } rawSku = sku; } catch { return null; } const lastDashIndex = rawSku.lastIndexOf('-'); if (lastDashIndex < 0) { return null; } return rawSku.slice(0, lastDashIndex); } /** * @param {string} id * @returns {string} */ function createProductUrl(id) { const match = location.href.match(/\.playstation\.com\/([^/]+)\//i); if (!match) { return ''; } const locale = match[1]; return `${location.protocol}//store.playstation.com/${locale}/product/${id}`; } for (const productEditionEl of document.querySelectorAll('article[data-qa^="mfeUpsell#productEdition"]')) { const editorTitleEl = productEditionEl.querySelector('[data-qa*="editionName"]')?.parentElement; if (!editorTitleEl) { continue; } const parent = editorTitleEl.parentElement; if (!parent) { continue; } const addCartEl = productEditionEl.querySelector('button[data-track]'); if (!addCartEl) { continue; } const skuId = findSkuId(addCartEl.getAttribute('data-track') ?? ''); if (!skuId) { continue; } const anchor = document.createElement('a'); anchor.href = createProductUrl(skuId); Object.assign(anchor.style, { display: 'block', }); parent.insertBefore(anchor, editorTitleEl); anchor.appendChild(editorTitleEl); } } /** @type {number | undefined} */ let timer = window.setInterval(() => { if (!document.querySelector('[data-qa="mfeUpsell"]:not([data-reactroot])')) { return; } run(); window.clearInterval(timer); timer = undefined; }, 100); })();