Shopee 悬浮按钮

添加快捷入口并移除 Shopee 追踪器

当前为 2024-12-19 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Shopee 悬浮按钮
// @namespace    http://tampermonkey.net/
// @version      1.4.0.7
// @license      GPL Rayu & Pixmi
// @description  添加快捷入口并移除 Shopee 追踪器
// @author       Rayu & Pixmi
// @match        https://seller.shopee.tw/*
// @exclude      https://seller.shopee.tw/webchat/conversations
// @match        *://shopee.tw/*
// @match        *://shopee.ph/*
// @match        *://shopee.sg/*
// @match        *://shopee.com.my/*
// @icon         https://icons.duckduckgo.com/ip2/shopee.com.ico
// @grant        none
// @require      http://code.jquery.com/jquery-3.6.0.min.js
// @run-at       document-body
// ==/UserScript==

(function() {
    'use strict';

    // 代码1 - 悬浮按钮
    const buttons = [
        { id: 'button1', content: '待<br>出货', link: 'https://seller.shopee.tw/portal/sale/shipment?type=toship' },
        { id: 'button2', content: '我的商品', link: 'https://seller.shopee.tw/portal/product/list/all?page=1&size=48' },
        { id: 'button3', content: '商品分析', link: 'https://seller.shopee.tw/datacenter/product/overview' },
        { id: 'button4', content: '我的广告', link: 'https://seller.shopee.tw/portal/marketing/pas/assembly' },
        { id: 'button5', content: '行销活动', link: 'https://seller.shopee.tw/portal/marketing' },
        { id: 'button6', content: '退貨退款', link: 'https://seller.shopee.tw/portal/sale/return' }
    ];

    const floatingButtonsContainer = document.createElement('div');
    floatingButtonsContainer.id = 'floating-buttons-container';
    document.body.appendChild(floatingButtonsContainer);

    buttons.forEach(button => {
        const buttonElement = document.createElement('a');
        buttonElement.id = button.id;
        buttonElement.className = 'floating-button';
        buttonElement.href = button.link;
        buttonElement.target = button.id === 'button10' ? '_self' : '_blank';
        buttonElement.innerHTML = button.content;
        floatingButtonsContainer.appendChild(buttonElement);
    });

    const customStyle = document.createElement('style');
    customStyle.innerHTML = `
        #floating-buttons-container {
            display: flex;
            flex-direction: column;
            position: fixed;
            top: 50%;
            right: 5px;
            transform: translateY(-50%);
            z-index: 9999;
        }

        .floating-button {
            display: flex;
            align-items: center;
            justify-content: center;
            background-color: rgba(238, 77, 45);
            color: #ffffff;
            width: 50px;
            height: 50px;
            border-radius: 5px;
            font-weight: bold;
            font-size: 18px;
            margin-top: 10px;
            text-align: center;
        }

        /* 添加的样式 */
        .route-portal-marketing-pas-assembly .ads-index,
        .route-portal-marketing-pas .ads-index {
            width: 1800px !important;
        }

        /* 賣家數據中心 */
        .page-content-wrapper.responsive-content-wrapper {
            max-width: 1500px !important;
        }

        /* 广告数据总览 */
        /* 顶栏 */
        .home-header-wrap[data-v-1b6bbf94]{
            justify-content: left !important;
        }

        /* 侧边距 */
        .route-portal-marketing-pas-index .page-container.has-sidebar-panel{
            padding-left: 5px !important;
        }

        .page-content-wrapper{
            margin-left: 60px !important;
        }

        /* 最小宽度 */
        .main-content .list-index[data-v-0fb3e6e7]{
            min-width: 1750px !important;
        }

        /* 公告与建议 */
        .to-do-list-container[data-v-515cb672], .top-text-container[data-v-7d956ea7]{
            display: none !important;
        }

        .rcmd-rewards-section[data-v-1049f2ca]{
            display: none !important;
        }

        .rcmd-rewards-section[data-v-481254a2]{
            display: none !important;
        }

        /* 详细数据宽度 */
        .module-page-detail[data-v-5f4edcf3] {
            min-width: 1750px!important;
        }

    `;
    document.head.appendChild(customStyle);

    // 代码2 - 移除追踪器
    const URL = window.location.href;
    const urlRegex = new RegExp(/\-i\.([\d]+)\.([\d]+)/);
    if (URL.match(urlRegex)) {
        let match = URL.match(urlRegex);
        window.location.replace(`${window.location.origin}/product/${match[1]}/${match[2]}`);
    } else {
        const rootmatch = document.evaluate('//div[@id="main"]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
        const rootnode = rootmatch.singleNodeValue;
        if (rootnode) {
            const callback = (mutationsList, observer) => {
                for (const mutation of mutationsList) {
                    const target = mutation.target;
                    if (target.nodeName !== 'DIV') continue;
                    const links = target.querySelectorAll('a');
                    if (links.length) {
                        for (const link of links) {
                            let match = link.href.match(urlRegex);
                            if (!match) continue;
                            link.href = `${window.location.origin}/product/${match[1]}/${match[2]}`;
                        }
                    } else {
                        const link = target.closest('a') || false;
                        if (!link) continue;
                        let match = link.href.match(urlRegex);
                        if (!match) continue;
                        link.href = `${window.location.origin}/product/${match[1]}/${match[2]}`;
                    }
                }
            }
            const observer = new MutationObserver(callback);
            // start observe
            observer.observe(document.body, {
                attributes: true,
                childList: true,
                subtree: true
            });
        }
    }
})();