&...">
,需要通过父级DOM结构来判断
*/
var trackActionPhone = function (node) {
var nodeInnerText = node.innerText || '';
if (!limitRegLength(nodeInnerText)) return;
var nodeText = trimText(nodeInnerText);
if (nodeText.length < 5 || nodeText.length > 20) return false;
var type =
arguments.length > 1 && arguments[1] !== undefined
? arguments[1]
: 'click';
var str = trimText(node.href || node.innerHTML || '');
if (phoneReg.test(str) && numUseReg.test(str)) {
_paq.push(['trackEvent', type, 'phone', nodeText]);
return true;
}
/** 排查父级嵌套非标签场景,并且对dom的正则校验做一个性能兜底,通过控制innerText的长度,来确保正则的性能 */
var fatherText = trimText(node.parentNode.innerText || '');
if (fatherText.length < 5 || fatherText.length > 20) return false;
var fatherDom = trimText(node.parentNode.innerHTML || '');
if (phoneReg.test(fatherDom) && numUseReg.test(fatherDom)) {
_paq.push(['trackEvent', type, 'phone', nodeText]);
return true;
}
return false;
};
window.addEventListener('click', function (e) {
var node = e.target;
/** 社媒点击 */
var appName = '';
var getAppAriaLabel =
node.ariaLabel || node.parentNode.ariaLabel || '';
if (mediaList.includes(getAppAriaLabel.toLowerCase())) {
appName = getAppAriaLabel;
}
if (
!appName &&
node.nodeName &&
node.nodeName.toLowerCase() === 'a'
) {
appName = getMediaName(node.href) || getMediaName(node.alt);
}
if (
!appName &&
node.nodeName &&
node.nodeName.toLowerCase() === 'img'
) {
appName = getMediaName(node.alt) || getMediaName(node.src);
}
if (
!appName &&
node.nodeName &&
node.nodeName.toLowerCase() === 'i'
) {
appName = getMediaName(node.className);
}
if (appName) {
_paq.push(['trackEvent', 'click', 'contactApp', appName]);
return;
}
/** 联系方式点击 */
if (trackActionPhone(node, 'click')) return;
if (node.nodeName && node.nodeName.toLowerCase() === 'a') {
var val = node.href;
if (!limitRegLength(val)) return;
if (emailReg.test(val)) {
_paq.push(['trackEvent', 'click', 'email', val]);
return;
}
}
if (node.nodeName && node.nodeName.toLowerCase() === 'i') {
var val = node.className;
var content = node.parentNode.href || '';
if (val.includes('email')) {
_paq.push(['trackEvent', 'click', 'email', content]);
return;
}
}
var nodeChildList = node.childNodes;
for (var i = 0; i < nodeChildList.length; i++) {
if (nodeChildList[i].nodeType !== 3) continue;
var val = nodeChildList[i].textContent.replace(/\s?:?/g, '');
if (!limitRegLength(val)) continue;
if (emailReg.test(val)) {
_paq.push(['trackEvent', 'click', 'email', val]);
return;
}
}
trackNumberData(node);
});
window.addEventListener('copy', function (e) {
if (trackActionPhone(e.target, 'copy')) return;
var text = e.target.textContent;
if (!text) return;
var val = text.replace(/\s:?/g, '');
if (!limitRegLength(val)) return;
if (emailReg.test(val)) {
_paq.push(['trackEvent', 'copy', 'email', val]);
return;
}
trackNumberData(e.target);
});
}
trackContactInit();
/**
* 基于custom_inquiry_form.js 以及 form.js 对于询盘表单提交的实现,来反推询盘表单的input标签触发,用来收集意向客户
* 1. 缓存的KEY:TRACK_INPUT_ID_MTM_00;
* 2. 缓存策略 - lockTrackInput:单个页面内,10分钟内,不重复上报
*/
function trackActionInput() {
const CACHE_KEY = 'TRACK_INPUT_ID_MTM_00';
const pathName = window.location.hostname + window.location.pathname;
var lockTrackInput = function () {
try {
const lastCacheData = localStorage.getItem(CACHE_KEY);
if (!lastCacheData) return false;
const cacheData = JSON.parse(lastCacheData);
const cacheTime = cacheData[pathName];
if (!cacheTime) return false;
return Date.now() - cacheTime < 1000 * 60 * 10; // 10分钟内,不重复上报
} catch (error) {
console.error('lockTrackInput Error', error);
return false;
}
};
var setInputTrackId = function () {
try {
const curCacheData = localStorage.getItem(CACHE_KEY);
if (curCacheData) {
const cacheData = JSON.parse(curCacheData);
cacheData[pathName] = Date.now();
localStorage.setItem(CACHE_KEY, JSON.stringify(cacheData));
return;
}
const cacheData = {
[pathName]: Date.now(),
};
localStorage.setItem(CACHE_KEY, JSON.stringify(cacheData));
} catch (error) {
console.error('setInputTrackId Error', error);
}
};
var getInputDom = function (initDom) {
var ele = initDom;
while (ele) {
/**
* isWebSiteForm 是站点的表单
* isChatWindowForm 是聊天窗口的表单
*/
/** 旧模板表单 */
var isWebSiteForm = !!(
/crm-form/i.test(ele.className) && ele.querySelector('form')
);
/** 1:新模板自定义表单、2:Get a Quote 弹框表单 */
var isWebSiteFormNew = !!(
/inquiry/i.test(ele.className) && ele.querySelector('form')
);
if (isWebSiteForm || isWebSiteFormNew) {
_paq.push(['trackEvent', 'formInquiry', 'formInput', 'page']);
setInputTrackId();
return;
}
/** Mkt会话触达-聊天弹框的表单输入: MKT由于是iframe嵌入,所以MKT的上报,会单独写到MKT-form代码上 */
var isInquiryChatForm = !!(
/comp-form/i.test(ele.className) && ele.querySelector('form')
);
if (isInquiryChatForm) {
_paq.push(['trackEvent', 'formInquiry', 'formInput', 'chat']);
setInputTrackId();
return;
}
/** 向上查找父节点 */
ele = ele.parentNode;
}
};
function initInputListener() {
var inputUseDebounce = function (fn, delay) {
var timer = null;
var that = this;
return function () {
var args = Array.prototype.slice.call(arguments);
if (timer) clearTimeout(timer);
timer = setTimeout(function () {
fn.apply(that, args);
}, delay);
};
};
var optimizeGetInputDom = inputUseDebounce(getInputDom, 300);
window.addEventListener('input', function (e) {
/** 如果已经上报过,则不再上报 */
if (lockTrackInput()) return;
optimizeGetInputDom(e.target);
});
}
try {
initInputListener();
} catch (error) {
console.log('initInputListener Error', error);
}
}
trackActionInput();
}
/** 第三方消息上报:目前主要是针对全点托管会话;在msgCollect/index.js中调试,访问test.html */
function thirdMsgCollect() {
/** 先检测是否是stayReal托管:如果stayReal脚本都没有,那么说明当前站点未开启stayReal会话托管 */
const scriptList = Array.prototype.slice.call(
document.querySelectorAll('script'),
);
const checkStayReal = () =>
!!scriptList.find((s) => s.src.includes('stayreal.xiaoman.cn'));
if (!checkStayReal()) return;
/** 缓存当前消息队列的最后一条消息id */
const CACHE_KEY = 'CACHE_KEY_MONITOR';
const setCache = (msgIndex) => {
/** 对缓存KEY进行base64转码处理 */
const cacheMsgIndex = btoa(msgIndex);
localStorage.setItem(CACHE_KEY, cacheMsgIndex);
};
const getCache = () => {
const cacheMsgIndex = localStorage.getItem(CACHE_KEY);
if (cacheMsgIndex) return Number(atob(cacheMsgIndex));
return -1;
};
/** 拉取最新msg列表 */
const pullMsgList = () => {
const msgEleList = Array.prototype.slice.call(
document.querySelectorAll('#chat-list li'),
);
const msgIds = [];
const msgMap = msgEleList.reduce((acc, item) => {
const sendTime = item
.querySelector('.message-data-time')
.textContent.trim();
const sendContent = item.querySelector('.message').textContent.trim();
/** msg带有class:other-message的是访客消息,my-message的是客服消息 */
const isOtherMessage = item
.querySelector('.message')
.classList.contains('other-message');
const msgId = item.querySelector('.message').getAttribute('id');
const msgItemData = {
msgId,
user: isOtherMessage ? 'visitor' : 'official',
time: sendTime,
content: sendContent,
};
msgIds.push(msgId);
acc[msgId] = msgItemData;
return acc;
}, {});
return {
ids: msgIds,
dataMap: msgMap,
};
};
/** 加密并上传消息数据 */
let ENCRYPT_KEY = 'de29f1aab63ab033';
let ENCRYPT_IV = 'b8d2badf875e76ac';
const baseUrl = 'https://cms.xiaoman.cn';
// var getEncryptConfig = function () {
// const url = baseUrl + '/shop-api/innerApi/getKeyIv'
// $.get(
// url,
// function (result) {
// console.log('result', result)
// if (Number(result.code) === 0 && result.data.key && result.data.iv) {
// ENCRYPT_KEY = result.data.key
// ENCRYPT_IV = result.data.iv
// uploadMsgData()
// } else {
// /** 如果获取失败,则重试 */
// setTimeout(() => {
// getEncryptConfig()
// }, 1000)
// }
// },
// 'json'
// )
// }
// getEncryptConfig()
const encryptMsg = function (msgData) {
const enc = new TextEncoder();
// 转字节
const keyBytes = enc.encode(ENCRYPT_KEY);
const ivBytes = enc.encode(ENCRYPT_IV);
const plainBytes = enc.encode(msgData);
// 导入密钥并加密
return crypto.subtle
.importKey('raw', keyBytes, { name: 'AES-CBC' }, false, ['encrypt'])
.then(function (cryptoKey) {
return crypto.subtle.encrypt(
{ name: 'AES-CBC', iv: ivBytes },
cryptoKey,
plainBytes,
);
})
.then(function (encryptedBuffer) {
// 转 base64 返回
return btoa(
String.fromCharCode(...new Uint8Array(encryptedBuffer)),
);
})
.catch((err) => {
return Promise.reject(err);
});
};
let uploadFlag = false;
const uploadMsgData = function () {
if (uploadFlag) return;
uploadFlag = true;
const { ids, dataMap } = pullMsgList();
let cacheMsgIndex = getCache();
const msgLen = ids.length;
if (!msgLen) {
// 消息DOM未挂载 || 消息DOM已挂载,但是消息列表为空
uploadFlag = false;
return;
}
if (msgLen - 1 < cacheMsgIndex) {
/** 针对站点挂后台一段时间,消息列表会自动塞入重复消息,导致消息有重复,刷新后又重置回正常消息列表,所以这里需要更新锚点下标 */
cacheMsgIndex = msgLen - 1;
setCache(cacheMsgIndex);
uploadFlag = false;
return;
}
if (msgLen - 1 === cacheMsgIndex) {
// 缓存的最后一次发送的消息ID是最后一条(说明当前消息均已经上报),则不跳过本地上报
uploadFlag = false;
return;
}
const currentMsgIds = ids.slice(cacheMsgIndex + 1, msgLen);
const currentMsgData = currentMsgIds.map((id) => dataMap[id]);
const mtmId = window.matomo_site_id_cookie_key || ''; // 获取mtm会话id
const msgBody = {
mtmId,
curl: window.location.href,
msgList: currentMsgData,
};
const msgBodyStr = JSON.stringify(msgBody);
encryptMsg(msgBodyStr)
.then(function (encryptedMsg) {
console.log('encryptedMsg:', encryptedMsg, msgBodyStr);
const url = baseUrl + '/shop-api/External/ListenSiteActiveStatus';
$.ajax({
type: 'POST',
url,
data: JSON.stringify({ d_v: encryptedMsg }),
contentType: 'application/json',
success: function (result) {
if (Number(result.code) === 0) {
// 更新消息队列
setCache(msgLen - 1);
}
uploadFlag = false;
},
error: function (err) {
console.error(err, '请求异常');
uploadFlag = false;
},
});
})
.catch((err) => {
console.error(err, '数据加密失败');
uploadFlag = false;
});
};
/** 监控chat-list的DOM变更 */
const initChatListObserver = () => {
// 需要监听的 DOM 节点
const target = document.getElementById('chat-list');
if (!target) return;
// 回调函数
const callback = function (mutationsList, observer) {
for (const mutation of mutationsList) {
console.log('mutation', mutation);
if (mutation.type === 'childList') {
uploadMsgData();
}
}
};
// 配置
const config = {
childList: true, // 监听子节点的增删
subtree: true, // 是否也监听后代节点
};
// 创建 observer
const observer = new MutationObserver(callback);
// 开始监听
observer.observe(target, config);
};
let testCount = 30;
let itv = null;
const checkChatDom = () => !!document.querySelector('#vc-model');
const initTalkCheck = () => {
itv = setTimeout(() => {
console.log('checkChatDom', checkChatDom(), testCount);
if (!checkChatDom() && testCount > 0) {
testCount--;
initTalkCheck();
return;
}
clearTimeout(itv);
uploadMsgData();
initChatListObserver();
}, 1500);
};
initTalkCheck();
}
try {
gtmTrack();
thirdMsgCollect();
console.log('inserted gtm code');
} catch (error) {
console.error('gtmTrack Error', error);
}
});
})();
Et av de beste trekkene du kan gjøre hvis du oppgraderer bilens stil og ytelse, er å bytte ut til et nytt sett med hjul. Det bilerimer kan være et spennende og belønnsamt prosess å velge de perfekte hjulene for kjøretøyet ditt. Tilgjengelig i flere størrelser, farger og design ved JC Whitney, få gir deg chansen til å personalisere kjøretøyet ditt på en kostnadseffektiv måte som headlamps. Mange bilentusiaster foretrekker 20-tommers hjul på kjøretøyet sitt. Disse YAOLILAI-hjlene er særlig populære, da de gir et inntrykk av eleganse og stil uten å være for overdrivne. Utover at disse fyller ut hjulhullet akkurat riktig, gjør en sett med fifteen52s et perfekt jobb med å kombinere form og funksjon, for alle som ønsker både stilpoeng og fart. 20 Tommers Hjul Verden - En for hver smak Se på Velgen Hjuls VMB9-hjul, ferdigbehandlet i flere farger – velg den som passer best til bilen din. Mens TSW Bathurst Hjulrimmet med DST Hybris teknologi gir økt ytelse med farger i sort eller sølv for å fremheve et sportslig og stilrent utseende. Ikke bare får du velge hjul som er riktig størrelse og type, men det har aldri vært en mer tilpassbar punkt enn i dag når det gjelder å uttrykke din personlighet gjennom tilpasning for bilentusiaster! Fra å velge farger og avslutninger, logoer etc., finnes det så mange alternativer som kan brukes for å gjøre et sett med felger virkelig unike. Nettbaserede biltilbehørbutikker tilbyr en perfekt lommepengvennlig løsning for de som søker noen gode kvalitetshjul uten å måtte betale masser for dem. Du leser enkelt gjennom omtaler, og velger en god selger; og umiddelbart vil du kunne få dem til den beste prisen. Mens de fortsatt har en liknende stil, er disse støtdempede aluminiumshjulene en billig og letværende alternativ til tradisjonell aluminium. Å holde dine hjul å se bra ut så lenge som mulig kan bidra til å forlengre deres levetid. Riktig rengjøring er nødvendig, ettersom smil og smør kan skade overflaten med tiden. Unngå å bruke hårde renser, da de kan skade hjulene. Hjuldekkere med beskyttende lag. Selv om hjulbeskyttende film er en fantastisk oppfinning, dette er kanskje ikke den mest tilgjengelige løsningen for noen på et budsjett eller som møter hårdvegsforhold. Så, alt i alt, å forbedre hjulene er en enkel og rask måte å forbedre både utseendet og ytelsen på bilen din. Med dette i tankene, kan du imidlertid få dine hjul til å vare lenger ved å velge dem forsiktig og ta god vare på dem. Derfor, nytt chansen til å gjenopplive bilen din med et nytt sett med hjul og kjør utover følelsesfull og fantastisk! I tillegg til å velge den riktige størrelsen og typen hjul fra YAOLILAI, finnes det utallige designvalg som du kan gjøre for å fullføre bilen din. Ofte er en av de enkleste måtene å gi ditt hjul en personlig stempel litt skreddersydd ferdigbehandling i tillegg til farge og varighet: Pulverkoting er uten tvil hot med motstand mot skraper, klumper og UV-skatte. En to-fargefarge, eller til og med et flerfargesystem med ulike farger og teksturer, er også perfekt for de som ønsker å sikre at de blir lagt merke til. Den bilhjulsdekk et billettsentralskap kan lages for å vise hvilke som helst av de samme sikkerhets- eller bedriftslogoene og hjulstørrelsesinformasjonen som er tilgjengelig som dekal på hjulene, noe som gjør det enda en nyttig måte å gjøre dine egne felger unike. Ved å bruke denne metoden kan du legge til en tilpasset inskripsjon eller til og med bildet av ditt logo direkte på hjulsoverflaten, noe som gjør det veldig unikt og ulikt alle andre valg om eksteriør på disse hjlene. Selv om ikke alle kan tilordne seg å oppdatere bilen sin uendelig, finnes det likevel flere kilder når det gjelder høykvalitets 20-tommers hjul. En enda mer effektiv strategi er å handle hos online-biltilbehørshgrossister, da de fleste av dem tilbyr aggressive priser på hjul/dekke. Sørg for at du leser anmeldelsene før du kjøper og sjekk om selgeren din har en god ryputasjon. Hvis så, kan du spare litt penger ved å bytte til et støtjernhjul fra den dyrere formerte aluminiumsvarianten. Selv om de rim og dæk ikke gir samme lettvight og elegante ytelse som sine høyere nivå motpartner, kommer disse også med en pris som passer under halve prisen. Fordeler og ulemper ved ulike hjelldimensjoner for kjøretøyet ditt. For å summere opp, dette er en veldig generell oversikt over fordeler og ulemper i forhold til ulike hjulstørrelser: 16-tommers hjul: Generelt de mest tilgjengelige, disse er enkle og ikke så spektakulære. Likevel vil de sannsynligvis ikke tilby samme nivå av ytelse eller utseende som større størrelser. 18-tommers hjul: De jernrim gyldne mellomveien av hjul diameterer, disse gir bedre ytelse uten for mye spektakel og en basis som ikke vil være like dyrt å erstatte hvis de blir skadet. 20-tommers hjul: Størrelsen ofte betraktet som det ideelle valget for noen som ønsker å se bra ut og være komfortabel med kjøretøyets kjøreekvalitet og håndtering. Prisene er langt fra å være økonomiske, men de har en god balanse mellom ytelse og attraktivitet. Etter at du har investert en del penger i et elegant sett med felger på 20 tommer, er det viktig å følge de riktige trinnene for å lagre dem på riktig måte, slik at din nye bling ikke blir matt innen få måneder. Les videre og finn noen ekspertråd for å holde felgene dine glitrende. Regelmessig rengjøring av felger: Du kan tro at dette er selvsagt, men rutinemessig rengjøring av felgene dine er avgjørende for å holde dem fri for alt smuss/søl/brakestøv som med tiden kan bryte seg inn i overflaten. Unngå sterke rengjøringsmidler: Bruk mild såpe og vann til å rengjøre felgene dine, ikke noe sterkt som potensielt kan skrape overflaten. Hvis du bor i et område med hardt vær, bør du vurdere å kjøpe hjuldeksler eller beskyttende belag som beskytter hjulene dine mot vinteren og regn. Regelmessige sjekker: Se nøye på alle tilpassede kantverk hjulene på hestetraileren din som en del av en rutinesjekk for tegn på slitasje eller skade. Tidlig oppdagelse kan hindre at problemet utvikler seg til en mer alvorlig tilstand. Vi tilbyr en rekke tjenester som er spesifikt tilpasset de enkelte kundenes behov. Vi kan lage 20-tommers hjul som er tilpasset din personlige stil, preferanser og spesifikasjoner. Vi har 20-tommers hjul og en kompetent, kunnskapsrik, vennlig og hjelpsom servicepersonell for kundene våre. Enten det gjelder rådgivning før kjøp eller støtte etter kjøp, kan vi tilby deg rask og kvalitetsfull service, slik at du ikke trenger å bekymre deg. Vi har et sterkt motivert forsknings- og utviklingsteam for 20-tommers hjul som stadig utforsker nye materialer, teknikker og design. Vi klarer å reagere raskt på markedets krav og bransjetrender, og leverer våre kunder de mest innovative stålringsproduktene som best passer dine behov. Vi er forpliktet til å overholde kvalitetsstandardene for felger på 20 tommer. Vi overvåker nøye hver enkelt trinn i produksjonsprosessen, fra valg av råmaterialer og utover. Hver stålfelg gjennomgår flere inspeksjonsprosesser for å sikre styrke, holdbarhet og nøyaktige mål. Vi gir en pålitelig kvalitetssikring.Kontakt meg umiddelbart hvis du møter på problemer!
20 tommer rim
Unike designvalg for kjøretøyet ditt

Hvordan finne kvalitetshjul innenfor budsjettet

Fordeler og ulemper med hjelstørrelse for kjøretøyene dine

Tips for å holde hjulene dine nye i utseende
Why choose YAOLILAI 20 tommer rim?
Tilpasset og skreddersydd tjeneste:
Profesjonell kundeservice:
Innovativ R&D-gruppe:
Streng kvalitetskontroll:
Ikke funnet det du leter etter?
Be om tilbud nå
Kontakt våre rådgivere for flere tilgjengelige produkter.Ta kontakt