1<!doctype html><html lang="en"><head>
1<script>window.__HTML_LOAD__ = Date.now(); 2 window.__NSS_REDIRECTING__ = false;</script>
2<meta charset="utf-8"><link rel="icon" type="image/x-icon" href="/favicon.ico"><link rel="apple-touch-icon" type="image/png" href="/favicon.png"><meta name="viewport" content="width=device-width,initial-scale=0.3,shrink-to-fit=no,user-scalable=yes"><meta name="theme-color" content="#000000"><meta http-equiv="X-UA-Compatible" content="IE=Edge"/><meta name="description" content="Experience fast and reliable courier deliveries with SPX Express Malaysia. Get status updates of your parcels easily with a tracking number that tracks shipment to drop off."><title>SPX Express Courier, Delivery and Tracking | SPX Malaysia</title>
2<script async src="https://deo.shopeemobile.com/shopee/test/ssc-fe/vision/runtime/vision-runtime.min.0.2.9.js"/>
2<script>try { 3 if (location.hostname.slice(-2) !== 'tw') { 4 if (!location.pathname.includes('dev-login-redirect')) { 5 const headers = {}; 6 if (location.origin.indexOf('citylink') !== -1) { 7 headers['X-source'] = 'ctl'; 8 } 9 fetch('/shipment/account/api/base_info/detail', { 10 headers, 11 }) 12 .then(res => res.json()) 13 .then(data => { 14 window.__preload_user_info = data; 15 }) 16 .catch(e => { }); 17 } 18 } 19 } catch (e) { }</script>
19<script>try { 20 if (window.__NSS_REGION__ !== 'tw') { 21 fetch('/shipment/account/website/config-center/get', { 22 method: 'POST', 23 headers: { 24 'Content-Type': 'application/json', 25 }, 26 body: JSON.stringify([{ group: 'Feature' }]), 27 }).then((res) => res.json()).then((res) => { 28 if (res.retcode === 0) { 29 window.__nss_preload_apollo_config = res.data; 30 } 31 }); 32 }; 33 } catch (e) {}</script>
33<script>// åå²é»è¾ï¼å¤çshopeexpress->spxçåå跳转 34 const hostname = window.location.hostname; 35 if (hostname.indexOf('shopeexpress') !== -1 || hostname.indexOf('spx') !== -1) { 36 window.region = hostname.substr(-2).toUpperCase(); 37 } 38 if (window.region !== 'BR' && window.location.origin.indexOf('shopeexpress') !== -1) { 39 window.__NSS_REDIRECTING__ = true; 40 window.location.replace(window.location.href.replace('shopeexpress', 'spx')); 41 }</script>
41<script>try { 42 var uuid = function () { 43 return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => { 44 var r = (Math.random() * 16) | 0; 45 var v = c === 'x' ? r : (r & 0x3) | 0x8; 46 return v.toString(16); 47 }); 48 } 49 var getSessionId = function() { 50 var sessionId = sessionStorage.getItem('ssc_reporter_sessionId') 51 if (sessionId) {return sessionId;} 52 sessionId = uuid(); 53 sessionStorage.setItem('ssc_reporter_sessionId', sessionId); 54 return sessionId; 55 }; 56 var getDeviceId = function() { 57 var deviceId = localStorage.getItem('ssc_reporter_deviceId') 58 if (deviceId) {return deviceId;} 59 deviceId = uuid(); 60 localStorage.setItem('ssc_reporter_deviceId', deviceId); 61 return deviceId; 62 }; 63 var getReferrer = function() { 64 var _referrer = sessionStorage.getItem('ssc_reporter_referrer'); 65 if (_referrer !== null) {return _referrer;} 66 _referrer = document.referrer || ''; 67 sessionStorage.setItem('ssc_reporter_referrer', _referrer); 68 return _referrer; 69 } 70 const uid = window.__preload_user_info && window.__preload_user_info.data && window.__preload_user_info.data.account_id 71 ? window.__preload_user_info.data.account_id + '' 72 : '' 73 window.__APP_VERSION__ = 'v20260923-1501-MY-LIVE'; 74 window.__NSS_REFERRER__ = getReferrer(); 75 !function (t, e) { "object" == typeof exports && "undefined" != typeof module ? e(exports) : "function" == typeof define && define.amd ? define(["exports"], e) : e((t = "undefined" != typeof globalThis ? globalThis : t || self)["tracing-entrance-tracker"] = {}) }(this, (function (t) { "use strict"; const e = t => localStorage.getItem(t); const a = "entrance_tracker_invalid_case"; class i { _reporter; _endStage = "js_init_end"; _reported = !1; _logger = !1; _currentStage = "html_init_start"; _maxWaitTimer = null; _xhrOptions = {}; _beforeSend; _maxWait = 13e3; _visiblechangeCount = 0; _startTime = performance.now(); _prevStartedTime = performance.now(); _prevStageTime = performance.now(); _contextData = { data: { invalid_case: 0, visible_tab: 1 } }; constructor(t, e) { this._reporter = t; const a = e || {}; this._logger = !!a.logger, this._xhrOptions = a.xhrOptions || {}, this._beforeSend = a.beforeSend, this._maxWait = a.maxWait && a.maxWait > 0 ? a.maxWait : this._maxWait } _logInfo(...t) { const e = this._logger; if (!e) return; const a = "string" == typeof e && "function" == typeof window.console[e] ? e : "info"; window.console[a](...t) } _getDuration(t) { return +(performance.now() - t).toFixed(2) } entryStageReport(t) { if (this._reported) this._logInfo("[åå§åæåç䏿¥] already reported! t: ", performance.now() - this._startTime); else try { const { data: e = {}, ...a } = this._contextData, i = { type: "numeric", key: "app_init_stage", value: this._getDuration(this._startTime), ...a, data: { stage: this._currentStage, visiblechange_count: this._visiblechangeCount, ...e, ...t } }, r = this._beforeSend ? this._beforeSend(i, this.getBaseData()) : i; if (!1 === r) return; this._reporter.sendData(r, this._xhrOptions), this._reported = !0, this._logInfo(`[åå§åæåç䏿¥] reported! is_success: "${t.is_success}". t: `, performance.now() - this._startTime), this._logInfo("[åå§åæåç䏿¥] reported! data: time: ", performance.now() - this._startTime, r) } catch (t) { console.error("[åå§åæåç䏿¥] Error: ", t) } } getNavigationType() { try { const t = window.performance.getEntriesByType("navigation"), e = Array.isArray(t) && t.length ? t[0].type : "unknown"; return this._logInfo("[åå§åæåç䏿¥] navigationType: ", e), e } catch (t) { return console.error("[åå§åæåç䏿¥] get navigation_type error: ", t), "unknown" } } clearMaxWaitTimer() { null !== this._maxWaitTimer && (clearTimeout(this._maxWaitTimer), this._maxWaitTimer = null) } pauseMaxWaitTimer() { this.clearMaxWaitTimer(), this._maxWait -= +(performance.now() - this._prevStartedTime).toFixed(0) } startMaxWaitTimer() { this.clearMaxWaitTimer(), this._logInfo("[åå§åæåç䏿¥] max_wait timer started. t:", performance.now() - this._startTime); const t = () => { this._logInfo("[åå§åæåç䏿¥] max_wait reached. t:", performance.now() - this._startTime), this._contextData.data && this._contextData.data.invalid_case || this._reported || this.entryStageReport({ is_success: 0 }) }; this._maxWait > 0 ? (this._prevStartedTime = performance.now(), this._maxWaitTimer = setTimeout(t, this._maxWait)) : t() } maxWaitHandler(t = !1) { if (t && this._visiblechangeCount++, document.hidden) this.addContextData({ data: { visible_tab: 0 } }), this.pauseMaxWaitTimer(); else { if (this._reported) return this._logInfo("[åå§åæåç䏿¥] already reported! No need for max wait. t: ", performance.now() - this._startTime), void this.clearVisibilitychange(); this.startMaxWaitTimer() } } clearVisibilitychange() { document.removeEventListener("visibilitychange", this.maxWaitHandler.bind(this, !0)) } checkMaxWait() { document.addEventListener("visibilitychange", this.maxWaitHandler.bind(this, !0)), this.maxWaitHandler() } getContextData() { return this._contextData } addContextData(t) { const e = t || {}, { data: a = {}, ...i } = this._contextData, { data: r = {}, ...n } = e; Object.assign(this._contextData, { ...i, ...n, data: { ...a, ...r } }) } changeInitStage(t, e = {}) { this._currentStage = t, this._logInfo(`[åå§åæåç䏿¥] changeInitStage: ${this._currentStage}. t: `, performance.now() - this._startTime), this.addContextData({ data: { ...e, [`to_${this._currentStage}_duration`]: this._getDuration(this._prevStageTime) } }), t !== this._endStage || this._contextData.data.invalid_case || this.entryStageReport({ is_success: 1 }), this._prevStageTime = performance.now() } start(t) { const e = t || {}; this._logger = !!e.logger || this._logger, this._xhrOptions = e.xhrOptions || this._xhrOptions, this._beforeSend = e.beforeSend || this._beforeSend, null !== this._maxWaitTimer && (this._logInfo("[åå§åæåç䏿¥] maxWait already started, resetting."), this.clearMaxWaitTimer(), this.clearVisibilitychange()), this._maxWait = e.maxWait && e.maxWait > 0 ? e.maxWait : this._maxWait, this.addContextData({ data: { navigation_type: this.getNavigationType(), referrer: document.referrer || "" } }), this.checkMaxWait() } getReporter() { return this._reporter } getBaseData() { return this._reporter.getBaseData() } setBaseData(t) { return this._reporter.setBaseData(t) } getInvalidCaseState() { return e(a) }
75 setAsInvalidCaseState(t = !1) { !function (t, e) { try { const a = "string" == typeof e ? e : JSON.stringify(e); localStorage.setItem(t, a) } catch (t) { console.error("[åå§åæåç] Error when set localStorage: ", t) } }(a, "1"), this.addContextData({ data: { invalid_case: 1 } }), t && window.addEventListener("unload", (() => { this.resetInvalidCaseState() })) } resetInvalidCaseState() { var t; t = a, localStorage.removeItem(t), this.addContextData({ data: { invalid_case: 0 } }) } } class r { _reportContext; _env; constructor(t) { const a = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (t => { const e = 16 * Math.random() | 0; return ("x" === t ? e : 3 & e | 8).toString(16) })), i = (() => { const t = window.location.hostname; return t.includes("systems") ? "XX" : t.substr(-2) })(), r = i.toUpperCase(); this._env = (t => { const e = t.match(/.+\.(dev|stable|test|uat|staging)\..+$/); return e ? e[1] : "live" })(window.location.hostname), this._reportContext = { a: r, ct: Math.floor(Date.now() / 1e3), env: this._env, na: i, pf: "pc", r: 1, s: location.href, sid: a, uid: e("useremail") || e("username") || uid || "-", ut: e("stationName") || "-", nt: navigator?.connection?.effectiveType || "unknown", ...t } } getBaseData() { return this._reportContext } setBaseData(t) { this._reportContext = { ...this._reportContext, ...t } } sendData(t, e) { const { type: a, ...i } = t || {}, r = [{ ...this._reportContext, dt: a || this._reportContext.dt, d: { type: a, ...i } }], n = new XMLHttpRequest, s = JSON.stringify(r), o = "live" === this._env ? "https://autobahn.ssc.shopeemobile.com/data/" : "https://autobahn.ssc.test.shopeemobile.com/data/", { withCredentials: h = !0, timeout: c = 1e5 } = e || {}; n.withCredentials = h, n.timeout = c, n.open("POST", o, !0), n.setRequestHeader("Content-type", "application/json; charset=utf-8"), n.send(s) } } t.AutobahnXhrReporter = r, t.EntranceTracker = i, t.startTracker = (t, e) => { const a = new r(t), n = new i(a, e); return n.start(), n }, Object.defineProperty(t, "__esModule", { value: !0 }) })); 76 var baseData = { 77 bt: 'SLS', 78 sbt: 'NSS', 79 a: location.hostname.slice(-2).toUpperCase(), 80 env: 'live', 81 v: window.__APP_VERSION__, 82 uid, 83 pf: 'pc', 84 sid: getDeviceId(), 85 did: localStorage.getItem('__fingerprint') || '', 86 tag: { 87 _sessionId: getSessionId(), 88 _ua: navigator.userAgent || '' 89 }, 90 r: 1, 91 s: location.href 92 }; 93 window.__EntryTracker = window['tracing-entrance-tracker'].startTracker(baseData, { 94 beforeSend(reportData, baseData) { 95 const headlessUA = navigator.userAgent.toLowerCase().includes('headless'); 96 const validStrValueRule = /^([\w-.]+)+$/; 97 const validUrlRule = /^https?:\/\/([.\w]+)(\/)?([#\w/?=&%-.]+)?/; 98 const { d, v, sid, pf, nt, s } = baseData; 99 const { data, key, type } = reportData; 100 const { navigation_type, stage, referrer } = data; 101 const isValidStr = [v, sid, pf, nt, key, type, navigation_type, stage].every(v => validStrValueRule.test(v)); 102 const isValidUrl = [s, referrer].every(v => validUrlRule.test(v) || !v); 103 104 let visit_type = 'valid_visit'; 105 if (headlessUA) visit_type = 'crawl_visit'; 106 if (!isValidStr || !isValidUrl) visit_type = 'xss_visit'; 107 reportData.data.visit_type = visit_type; 108 return reportData; 109 } 110 }); 111 var esUrl = ['test'].indexOf('live') !== -1 ? 'https://autobahn.ssc.test.shopeemobile.com/data/' : 'https://autobahn.ssc.shopeemobile.com/data/'; 112 var reportToES = (d) => fetch(esUrl, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ ...baseData, ct: Math.floor(Date.now() / 1000), ...d }) }); 113 reportToES({ dt: 'count', d: { key: 'entry', data: { pathname: location.pathname, href: location.href, render: 0, prevPath: document.referrer, referrer: window.__NSS_REFERRER__ } } }); 114 } catch (e) { 115 } 116 !function () { var _; if (!(null === (_ = window.__MDAP_PREV_RESOURCE__) || void 0 === _ ? void 0 : _.init)) { window.__MDAP_PREV_RESOURCE__ = { data: [], init: !0 }; var n = function (_) { var n; null === (n = window.__MDAP_PREV_RESOURCE__.data) || void 0 === n || n.push(_) }; window.addEventListener("error", n, !0), window.__MDAP_PREV_RESOURCE__.removePrevListener = function () { window.removeEventListener("error", n) } } }();</script>
116<script>const WIDTH = 1400; //设计稿æå®½ 117 const isCoIdDomain = () => { 118 if (typeof window === 'undefined') { 119 return false; // æå¡å¨ç«¯è¿åé»è®¤å¼ 120 } 121 const hostname = window.location.hostname; 122 return hostname.includes('.co.id'); 123 }; 124 const isIdRegion = isCoIdDomain(); 125 const mobileAdapter = () => { 126 const scale = screen.width / WIDTH; 127 const _content = `width=${WIDTH}, initial-scale=${scale}, maximum-scale=${scale}, minimum-scale=${scale}, user-scalable=yes`; 128 // å°å°¼å°åºä½¿ç¨æ´å®½æ¾çviewport 129 const idContent = `width=${WIDTH},initial-scale=${scale}, user-scalable=yes`; 130 const content = isIdRegion ? idContent : _content; 131 let meta = document.querySelector('meta[name=viewport]'); 132 if (!meta) { 133 meta = document.createElement('meta'); 134 meta.setAttribute('name', 'viewport'); 135 document.head.appendChild(meta); 136 } 137 meta.setAttribute('content', content); 138 }; 139 mobileAdapter(); //æ§è¡å½æ° 140 window.onorientationchange = mobileAdapter; //æè½¬å±å¹éæ°æ ¡æ£</script>
140<meta property="og:type" content="website"/>
140<script>var __initMap__; 141 function mapReady(cb) { 142 __initMap__ = cb; 143 } 144 function initMap() { 145 __initMap__ ? __initMap__() : (window.__mapScriptLoaded__ = true); 146 }</script>
146<script>performance.mark('qms-css:start');</script>
146<link rel="stylesheet" href="/loading.css"/>
146<script>performance.mark('qms-css:end');</script>
146<style>html, 147 body, 148 #root { 149 height: 100%; 150 margin: 0; 151 padding: 0; 152 }</style>
152<script>(function (w, d, s, l, i) { 153 if (window.region !== 'BR') { 154 w[l] = w[l] || []; w[l].push({ 155 'gtm.start': 156 new Date().getTime(), event: 'gtm.js' 157 }); var f = d.getElementsByTagName(s)[0], 158 j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = 159 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); 160 var gtagScript = document.createElement('script'); 161 gtagScript.async = true; 162 gtagScript.src = 'https://www.googletagmanager.com/gtag/js?id=UA-61914165-14'; 163 f.parentNode.insertBefore(gtagScript, f); 164 } 165 })(window, document, 'script', 'dataLayer', 'GTM-WJZQSJF');</script>
165<script>document.addEventListener('DOMContentLoaded', function () { 166 if (window.region !== 'BR') { 167 var noScript = document.createElement('noscript'); 168 var iframe = document.createElement('iframe'); 169 iframe.src = "https://www.googletagmanager.com/ns.html?id=GTM-WJZQSJF"; 170 iframe.height = "0"; 171 iframe.width = "0"; 172 iframe.style.display = "none"; 173 iframe.style.visibility = "hidden"; 174 noScript.appendChild(iframe); 175 var body = document.body; 176 body.insertBefore(noScript, body.firstChild); 177 } 178 });</script>
178<script>if (window.region === 'TH') { 179 window.dataLayer = window.dataLayer || []; 180 function gtag() { dataLayer.push(arguments); } 181 gtag('js', new Date()); 182 try { 183 if (!JSON.parse(localStorage.getItem('open-spx-cookiesTypeList') || '[]').includes('performance')) { 184 gtag('consent', 'default', { 185 'ad_storage': 'denied', 186 'analytics_storage': 'denied' 187 }); 188 dataLayer.push({ 189 'event': 'default_consent' 190 }); 191 } 192 } catch (error) { console.error(error) } 193 }</script>
193</head><body><div id="root"><div class="pre-loading"><div id="spx-loading-logo" class="spx-loading-logo"></div><div class="loading"><span></span> <span></span> <span></span> <span></span> <span></span> <span></span> <span></span> <span></span> <span></span></div></div></div>
193<script>performance.mark('qms-js:start');</script>
193<script>if (location.search.includes('preview=')) { 194 const scriptTag = document.createElement('script'); 195 const version = new URLSearchParams(location.search).get('preview'); 196 scriptTag.setAttribute('src', 'https://sls.sp-cdn.shopee.com/api/v4/69067583/pgmgmt/spx-my-pc-conf.js'.replace('.js', `-draft-${version}.js`)); 197 document.head.appendChild(scriptTag); 198 }</script>
198<script src="https://sls.sp-cdn.shopee.com/api/v4/69067583/pgmgmt/spx-my-pc-conf.js"></script>
198<script>// google map api 199 const mapKey = ['test', 'uat', 'staging'].indexOf('live') !== -1 ? 'AIzaSyDg98eJ55wAsflSlkBk0iUXcKnKHP8GpSY' : 'AIzaSyB0a3pTo-HIk4bWQp5-ZDRqRXoicpS-oOk'; 200 const googleMapApiScript = document.createElement('script'); 201 googleMapApiScript.src = 'https://maps.googleapis.com/maps/api/js?libraries=places&callback=initMap&key=' + mapKey; 202 googleMapApiScript.defer = true; 203 document.body.append(googleMapApiScript);</script>
203<script src="https://deo.shopeemobile.com/shopee/spx-fe-lib/react/17.0.2/react.development.js" crossorigin></script>
203<script src="https://deo.shopeemobile.com/shopee/spx-fe-lib/react-dom/17.0.2/react-dom.development.js" crossorigin></script>
203<script src="//deo.shopeemobile.com/shopee/shopee-spx-live-my/static/js/app.2d0fcb2bb.js" crossorigin></script>
203<script>performance.mark('qms-js:end');</script>
203<script>const prefix = 'ssc-numeric'; 204 const _separator_ = '-:-'; 205 const { pathname } = location; 206 const qmsFcpTIDName = `FCP_${pathname.replace(/\/|-/g, '_')}`; 207 const qmsLcpTIDName = `LCP_${pathname.replace(/\/|-/g, '_')}`; 208 window.qmsFcpTID = `${qmsFcpTIDName}${_separator_}${Date.now()}`; 209 window.qmsLcpTID = `${qmsLcpTIDName}${_separator_}${Date.now()}`; 210 performance.mark(`${prefix}-${qmsFcpTID}:start`); 211 performance.mark(`${prefix}-${qmsLcpTID}:start`);</script>
211</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.