Greasy Fork

Greasy Fork is available in English.

Track aliexpress parcel

Opens parcelsapp with the tracking code of your order

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         Track aliexpress parcel
// @namespace    http://tampermonkey.net/
// @version      0.13
// @description  Opens parcelsapp with the tracking code of your order
// @author       Nikolai Tsvetkov
// @match        https://trade.aliexpress.com/order_detail.htm*
// @match        https://*.aliexpress.com/store/*
// @match        https://*.aliexpress.com/p/order/index.html*
// @match        https://*.aliexpress.com/p/order/detail.html*
// @match        https://*.aliexpress.com/p/tracking/index.html*
// @match        https://track.aliexpress.com/logisticsdetail.htm*
// @icon         https://www.google.com/s2/favicons?domain=aliexpress.com
// @grant        none
// @license MIT
// ==/UserScript==

let popoverTimer = 0;
let divToObserve = '.comet-popover-wrap';

let observer = new IntersectionObserver((entries, observer) => {
    entries.forEach(entry => {
        track();
        observer.unobserve(entry.target); // Stop observing this element
    });
}, {
    threshold: 0.1 // Adjust if needed. 0.1 means 10% of the element is visible
});

let existingDivs = document.querySelectorAll(divToObserve);
existingDivs.forEach(div => {
    observer.observe(div);
});

const mutationObserver = new MutationObserver((mutations) => {
    mutations.forEach((mutation) => {
        mutation.addedNodes.forEach((node) => {
            if (node.nodeType === Node.ELEMENT_NODE) {
                if (node.matches(divToObserve)) {
                    observer.observe(node);
                }
                if (node.querySelector(divToObserve)) {
                    node.querySelectorAll(divToObserve).forEach(div => {
                        observer.observe(div);
                    });
                }
            }
        });
    });
});

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

function insertTrackingLink (trackingDiv) {
    clearInterval(popoverTimer);
    if (trackingDiv && !trackingDiv.innerText.includes('🔗')) {
        let trackingCode = trackingDiv.innerText;
        var linkParcelapp = "https://parcelsapp.com/tracking/" + trackingCode;
        var link17Track = "https://t.17track.net/en#nums=" + trackingCode;
        var linkOrdertracker = "https://www.ordertracker.com/track/" + trackingCode;
        trackingDiv.innerHTML = "<span>" + trackingCode +
            " <a href='" + linkParcelapp + "' target='_blank' readonly> Track 1 🔗</a>" +
            " <a href='" + link17Track + "' target='_blank'> Track 2 🔗</a>" +
            " <a href='" + linkOrdertracker + "' target='_blank'> Track 3 🔗</a>" +
            "</span>";
    }
}

function trackNewStyle () {
    let trackingDivs = document.querySelectorAll('.order-track-popover-title p:nth-of-type(2) span');
    trackingDivs.forEach(trackingDiv => {
        insertTrackingLink(trackingDiv);
    });
}

function track () {
    let trackingDivSelectors = [
        '.tracking-no span',
        'div.tracking-wrap div:nth-of-type(2) span'
    ];

    let trackingDiv = document.querySelector('.tracking-wrap:nth-of-type(3) span:nth-of-type(2)');
    trackingDiv && insertTrackingLink(trackingDiv);

    let trackButtons = document.querySelectorAll("a.comet-btn.comet-btn-block.order-item-btn");
    trackButtons.forEach(trackButton => {
        trackButton.addEventListener('mouseenter', () => {
            popoverTimer = setInterval(trackNewStyle, 0.5e3);
        })
    });
}

function changeTarget() {
    var links = document.querySelectorAll('a[ae_button_type="productList_click"]');
    for (var i = 0; i < links.length; i++) {
        var $el = links[i];
//        $el.href = $el.dataset.href;
        $el.setAttribute('target', '_blank');
    }
    links = document.querySelectorAll('a[ae_object_type="product"]');
    var a;
    for (i = 0; i < links.length; i++) {
        $el = links[i];
//        $el.href = $el.dataset.href;
        $el.setAttribute('target', '_blank');
    }
    var div;
    links = document.querySelectorAll('div[ae_object_type="product"]');
    for (i = 0; i < links.length; i++) {
        $el = links[i];
        div = document.createElement('a');
//        div.href = $el.dataset.href;
        div.innerHTML = 'new tab link';
        div.setAttribute('target', '_blank');
        $el.parentNode.insertBefore( div, $el.nextSibling );
    }
}

(function() {
    'use strict';
    setTimeout(track, 5e3);
    setTimeout(changeTarget, 5e3);
})();