&...">
,需要通过父级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);
}
});
})();
Um dos melhores passos que você pode tomar para melhorar o estilo e o desempenho do seu carro é trocar por um novo conjunto de rodas. É rodas de carro um processo divertido e recompensador escolher as rodas perfeitas para o seu veículo. Disponíveis em diversos tamanhos, cores e designs na JC Whitney, poucas opções permitem personalizar seu veículo de forma tão eficiente em termos de custo como faróis. Muitos entusiastas automotivos preferem rodas de 20 polegadas em seus veículos. Essas rodas YAOLILAI são particularmente populares, pois proporcionam uma sensação de elegância e estilo ainda sutil, sem serem excessivas. Além do fato de que essas preenchem bem os espaços das rodas, um conjunto de quinze52s faz um trabalho ideal combinando forma e função, opções para qualquer pessoa que deseja tanto pontos de estilo quanto velocidade. mundo das Rodas de 20 Polegadas - Uma para cada gosto Dê uma olhada nas rodas VMB9 da Velgen Wheels, disponíveis em várias cores - escolha a que melhor combina com seu carro. Enquanto isso, a Roda TSW Bathurst apresenta a tecnologia DST Hybris, que oferece desempenho aprimorado com acabamentos em preto ou prata para destacar um apelo esportivo e estiloso. Não só você pode escolher os pneus que têm o tamanho e tipo certos, mas nunca houve um ponto mais personalizável do que hoje quando se trata de expressar sua personalidade por meio da personalização para entusiastas de carros! Desde a escolha das cores e acabamentos, logotipos etc., existem tantas opções disponíveis para tornar um conjunto de rodas verdadeiramente único. Lojas online de acessórios para carros oferecem uma solução amigável ao bolso para aqueles que buscam obter boas rodas de qualidade sem gastar muito. Você simplesmente lê as avaliações e escolhe um bom vendedor; e imediatamente conseguirá o melhor preço. Enquanto ainda mantêm um estilo semelhante, essas rodas de alumínio fundido são uma alternativa leve e acessível ao alumínio tradicional. Manter seus pneus com boa aparência por quanto tempo for possível pode ajudar a prolongar sua vida útil. A limpeza adequada é essencial, pois sujeira e lama podem danificar o acabamento ao longo do tempo. Evite usar limpadores agressivos, pois eles podem danificar os pneus. Capas protetoras para rodas. Embora o filme protetor para rodas seja uma ótima invenção, isso talvez não seja a opção mais acessível para alguém com orçamento limitado ou enfrentando condições de estrada severas. Portanto, no geral, melhorar as rodas é uma maneira fácil e rápida de melhorar tanto a aparência quanto o desempenho do seu carro. Com isso em mente, você pode fazer com que suas rodas durem mais escolhendo-as sabiamente e tomando cuidado para mantê-las. Assim, aproveite a chance de revitalizar seu carro com um novo conjunto de rodas e saia para a estrada se sentindo ousado e fabuloso! Além de escolher o tamanho e tipo adequados de rodas YAOLILAI, existem inúmeras opções de design que você pode fazer ao completar seu carro. Frequentemente, uma das maneiras mais fáceis de dar um toque pessoal às suas rodas é com um pouco de acabamento sob medida, além de cor vibrante e durabilidade: os acabamentos a pó são sem dúvida populares por sua resistência a riscos/fragmentos/danos UV. Um esquema de cores bicolores, ou até mesmo multicolorido usando diferentes cores e texturas, também é perfeito para aqueles que querem se certificar de que serão notados. O jantes de carro a peça central de bilro pode ser feita para exibir qualquer um dos mesmos logotipos de segurança ou corporativos e informações de tamanho da roda disponíveis como adesivo nas rodas, tornando-a mais uma maneira elegante de personalizar suas próprias jantes. Usando esse método, você pode adicionar uma inscrição personalizada ou até mesmo a imagem do seu logotipo diretamente na superfície da roda, tornando-a muito única e diferente de qualquer outra decisão sobre o exterior dessas rodas. Embora nem todos possam se dar ao luxo de atualizar continuamente seu carro, existem muitas fontes quando se trata de rodas de 20 polegadas de alta qualidade. Uma estratégia ainda mais eficaz é comprar em lojas atacadistas de acessórios automotivos online, pois a maioria delas oferece preços agressivos para rodas/capas. Certifique-se de ler as avaliações antes de comprar e verificar se o vendedor tem uma boa reputação. Nesse caso, você pode economizar algum dinheiro ao optar por uma roda de alumínio fundido em vez da opção mais cara de alumínio forjado. Embora elas aros e pneus não ofereçam o mesmo peso leve e desempenho elegante dos seus equivalentes de maior nível, também vêm com um acabamento correspondente a menos da metade do preço. Os Prós e Contras de Diferentes Tamanhos de Rodas Para Seu Veículo Resumindo, esta é uma visão geral muito geral dos benefícios e desvantagens em relação a diferentes tamanhos de rodas: rodas de 16 polegadas: Geralmente as mais acessíveis, estas são simples e discretas. No entanto, provavelmente não oferecerão o mesmo nível de desempenho ou aparência que tamanhos maiores. rodas de 18 polegadas: O jantes de aço ponto de equilíbrio dos diâmetros de rodas, estas oferecem melhor desempenho sem muito brilho e uma base que não será tão cara para substituir se forem danificadas. rodas de 20 polegadas: O tamanho frequentemente considerado o ponto ideal para quem quer ter um bom visual e conforto em termos de qualidade da condução e manuseio. Os preços estão longe de serem econômicos, mas elas têm um bom equilíbrio entre desempenho e atração visual. Depois de investir uma quantia considerável em um conjunto sofisticado de rodas de 20 polegadas, é importante seguir os procedimentos corretos para armazená-las adequadamente, a fim de que seu novo acessório brilhante não perca o brilho em poucos meses. Continue lendo e descubra algumas dicas de especialistas para manter suas rodas sempre impecáveis. Limpeza regular das rodas: Você pode achar que isso é óbvio, mas a limpeza periódica das rodas é essencial para mantê-las livres de toda a sujeira, graxa e poeira de freio que, com o tempo, podem se incrustar no acabamento. Evite produtos de limpeza agressivos: Utilize sabão neutro e água para limpar suas rodas, não produtos abrasivos que possam arranhar o acabamento. Se você mora em uma região com clima severo, considere comprar capas para rodas ou revestimentos protetores que protejam suas rodas do inverno e da chuva. Verificações regulares: examine todas as aros personalizados rodas do seu veículo para transporte de cavalos como parte de uma inspeção rotineira em busca de sinais de desgaste ou danos. A detecção precoce pode impedir que o problema se agrave para um estado mais sério. Oferecemos uma variedade de serviços especialmente desenvolvidos para atender às necessidades específicas de cada cliente. Podemos criar rodas de 20 polegadas personalizadas conforme seu estilo pessoal, preferências e especificações. Contamos com uma equipe de atendimento competente, conhecedora, amigável e prestativa para os clientes, especializada em rodas de 20 polegadas. Seja para consultas pré-compra ou assistência pós-compra, oferecemos um atendimento ágil e de qualidade, garantindo que você não precise se preocupar. Temos uma equipe altamente motivada de P&D especializada em rodas de 20 polegadas, que constantemente explora novos materiais, técnicas e designs. Somos capazes de responder rapidamente às demandas e tendências do mercado, fornecendo aos nossos clientes os produtos mais inovadores em aros de aço, perfeitamente adaptados às suas necessidades. Comprometemo-nos com os padrões de qualidade de aros de 20 polegadas. Monitoramos cuidadosamente cada etapa do processo produtivo, começando pela seleção das matérias-primas. Cada aro de aço passa por múltiplos processos de inspeção para garantir sua resistência, durabilidade e dimensões precisas. Oferecemos uma garantia de qualidade confiável.Contacte-me imediatamente se tiver problemas!
rodas de 20 polegadas
Opções de Design Únicas para o Seu Veículo

Como Encontrar Pneus de Qualidade dentro do Orçamento

Prós e Contras do Tamanho dos Pneus para Seus Veículos

Dicas para Manter Suas Rodas com Aparência Nova
Why choose YAOLILAI rodas de 20 polegadas?
Serviço personalizado e sob medida:
Atendimento ao cliente profissional:
Equipe inovadora de P&D:
Controle rigoroso de qualidade:
Não encontrou o que procura?
Solicitar Orçamento Agora
Entre em contato com nossos consultores para mais produtos disponíveis.Entre em contato