Greasy Fork is available in English.

FuckAlibabaTrack 删除阿里巴巴集团下网站的跟踪参数

删除阿里巴巴集团下网站的跟踪参数

// ==UserScript==
// @name         FuckAlibabaTrack 删除阿里巴巴集团下网站的跟踪参数
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  删除阿里巴巴集团下网站的跟踪参数
// @author       junbaor
// @match        *.aliyun.com/*
// @match        *.taobao.com/*
// @match        *.tmall.com/*
// @grant        none
// ==/UserScript==
(function () {
    'use strict';

    function removeParam(url, paramName) {
        var indexParamStart = url.indexOf("?");
        var indexParamEnd = url.indexOf("#");

        var queryString;
        var anchorString = "";
        if (indexParamEnd < 0) {
            queryString = url.substring(indexParamStart);
        } else {
            queryString = url.substring(indexParamStart, indexParamEnd);
            anchorString = url.substring(indexParamEnd)
        }

        var resultUrl = doRemoveParam(queryString, paramName);
        return url.substring(0, indexParamStart) + resultUrl + anchorString;
    }

    function doRemoveParam(url, paramName) {
        var firstCase = url.indexOf("?" + paramName + "=");
        var noFirstCase = url.indexOf("&" + paramName + "=");

        // 需要替换的参数不是第一个参数
        if (noFirstCase >= 0) {
            var before = url.substring(0, noFirstCase);
            var after = url.substring(noFirstCase);
            var i = after.indexOf("&", 2);
            return before + after.substring(i);
        } else if (firstCase >= 0) {
            // 需要替换的参数是第一个参数
            var i2 = url.indexOf("&");
            if (i2 < 0) {
                return "";
            }
            var substring = url.substring(i2);

            if (substring.startsWith("&")) {
                return "?" + substring.substring(1);
            }
            return substring;
        }
        // 不包含想要替换的参数直接返回
        return url;
    }

    var locationUrl = window.location.href;
    var params = ["spm", "acm", "scm", "ali_trackid", "clk1", "upsid", "bxsign"];
    for (var i = 0; i < params.length; i++) {
        locationUrl = removeParam(locationUrl, params[i]);
    }
    console.log("替换后的最终地址:" + locationUrl);
    history.replaceState(history.state, history.title, locationUrl);
})();