Greasy Fork

Greasy Fork is available in English.

縮減蝦皮網址

網址只留下識別碼

当前为 2025-09-17 提交的版本,查看 最新版本

// ==UserScript==
// @name        縮減蝦皮網址
// @namespace   http://greasyfork.icu/zh-TW/scripts/457084
// @match       *shopee.tw/*
// @author      czh
// @icon        https://www.google.com/s2/favicons?sz=64&domain=shopee.tw
// @run-at      document-start
// @license     GNU GPLv3
// @description 網址只留下識別碼
// @version 0.0.2.0
// ==/UserScript==

(function() {
    'use strict';

    // 定義正規表達式,用於提取 shopId 和 itemId
    const shopeeRegex = /shopee\.tw\/.*-i\.(\d+)\.(\d+)/;
    let lastHandledUrl = '';

    // 處理網址縮短的核心函式
    function processUrl() {
        const currentUrl = window.location.href;

        // 如果目前的網址和上次處理的網址相同,就不用再處理了
        if (currentUrl === lastHandledUrl) {
            return;
        }

        const match = currentUrl.match(shopeeRegex);

        if (match) {
            const shopId = match[1];
            const itemId = match[2];
            const newUrl = `https://shopee.tw/0-i.${shopId}.${itemId}`;

            // 如果目前的網址已經是精簡格式,或與上次處理的網址相同,就跳過
            if (currentUrl === newUrl || currentUrl === lastHandledUrl) {
                return;
            }

            // 使用 history.replaceState() 來修改網址
            // 這樣做不會產生新的瀏覽歷史記錄,且不會重新載入頁面
            window.history.replaceState({}, '', newUrl);

            // 更新上次處理的網址
            lastHandledUrl = newUrl;

            console.log("網址已縮短為:", newUrl);
        }
    }

    // 使用 MutationObserver 監聽 DOM 變化
    // 這是最可靠的方式,當蝦皮動態載入新內容時,都會觸發它
    const observer = new MutationObserver(processUrl);

    // 監聽整個網頁主體(document.body)的子節點和子樹變化
    observer.observe(document.body, { childList: true, subtree: true });

    // 為了確保頁面剛載入時也能處理,手動呼叫一次
    window.addEventListener('load', processUrl);

})();