...">
,需要通过父级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);
}
});
})();
Dito sa YAOLILAI, naniniwala kami na walang set ng gulong ang kumpleto nang walang perpektong set ng Mga bilog ng tsakong truck . Pinakamahusay na paggawa ng bawat gulong ay nangangalaga sa mataas na pamantayan. Ang aming mga rim ay gawa sa matibay ngunit magaan na materyales na nagbibigay ng ligtas at maaasahang solusyon para sa pang-araw-araw na paggamit. Kung ikaw ay nasa kalsada nang matagal o kahit sa paligid lamang, ang pagsakay gamit ang mga gulong na YAOLILAI ay maayos at malambot ang takbo! At ang aming dedikasyon sa kalidad ay hindi natatapos sa mga materyales na ginagamit namin. Hindi kailanman isinusacrifice ang kaligtasan at pagganap sa anumang aspeto ng disenyo ng gulong. Ang aming mga gulong ay ginagawa ayon sa pinakamataas na pamantayan ng kalidad, na nag-aalok ng lahat – mula sa traksyon, katatagan, at magandang hitsura hanggang sa pinakamahusay na nakakuskos na biyahe sa merkado. Maaari mong tiyakin na hindi mo kailangang i-compromise ang kaligtasan para sa istilo kapag ikaw ay nasa YAOLILAI wheels. Kung ikaw ay naghahanap ng mataas na kalidad na 6x5 5 wheels na may pinakamahusay na presyo, mangyaring huwag mag-atubiling makipag-ugnayan kay YAOLILAI. Ang aming brand ay tungkol sa pagbibigay sa iyo ng pinakamahusay na halaga sa wheels, na may mga set na mataas ang kalidad na hindi mag-iiwan sa iyong bangko ng alikabok. Kung ikaw man ay mahilig sa kotse na gustong mapabuti ang itsura ng sasakyan o isang may-ari ng negosyo na nangangailangan ng de-kalidad, magandang wheels para sa iyong fleet, mayroon kaming mga opsyon na angkop sa iyong badyet at gamit. Sa YAOLILAI, alam namin na ang halaga para sa iyong pera ay lubhang kailangan. Kaya mayroon kami malawak na seleksyon ng 6x5 5 wheels sa iba't ibang presyo upang umangkop sa bawat badyet. Kahit ikaw ay nangangailangan ng abot-kaya, o gusto mong gumastos nang malaki sa pinakamahusay, narito lahat ito. Nagsisikap kaming magbigay ng de-kalidad na wheels sa isang presyo na kayang-kaya mo nang hindi isasacrifice ang kalidad o pagganap. Bukod dito, nag-aalok din kami ng mahusay na serbisyo sa customer upang masagot ang anumang tanong na maaari mong mayroon tungkol sa aming wheels at tires. Mayroon kaming mapagkakatiwalaan at maalam na staff na handang tumulong sa iyo na pumili ng perpektong wheels na angkop sa iyong pangangailangan. Kung mayroon kang anumang katanungan tungkol sa pagkakasya, sukat, o pagganap, tutulungan kita. Kapag pinili mo ang YAOLILAI para sa 6x5 5 wheels, hindi lang ikaw nakakakuha ng de-kalidad na produkto – pinipili mo rin kung gaano karami pang oras at pera ang gagastusin mo sa iyong trak. 6x5.5 na gulong para sa iyong kotse, may ilang mahahalagang bagay na dapat isaalang-alang. Ang pinakaunang kailangan mong tiyakin ay ang pagkakasya ng mga gulong sa iyong sasakyan. Ibig sabihin, kailangan mong i-verify ang bolt pattern (6x5.5) sa kasong ito upang tumpak na makapasok. Kailangan mo ring isaisip ang lapad at offset ng mga gulong—dapat silang tugma sa suspension at preno ng iyong sasakyan. Sa mga usaping pagkakatugma, 6x5.5 (114.3) bolt pattern sa iyong sasakyan habang ikaw ay nakakapag-enjoy pa rin ng biyahe kasama ang ibang sasakyan na may iba't ibang bolt pattern sa pamamagitan ng pagbili ng angkop na mounting hardware at adapter. Subalit, gaya ng lagi naming inirerekomenda, mangyaring i-verify ang pagkakasya batay sa eksaktong brand at model ng iyong sasakyan. Ang YAOLILAI customer service ay narito upang tulungan kang hanapin ang perpektong gulong para sa iyong sasakyan at sagutin ang anumang tanong tungkol sa pagkakatugma. Kami ay may isang lubos na motibadong RD team na binubuo ng anim (6) na miyembro na gumagamit ng 5x5 na layout ng mga gulong, na patuloy na sumusuri ng mga bagong materyales, teknik, at disenyo. Kakayahang mabilis na tumugon kami sa mga pangangailangan at uso ng merkado sa industriya, at nagbibigay sa aming mga customer ng pinakabagong mga produkto na bakal na singsing na angkop sa inyong mga pangangailangan. Sumusunod kami sa pinakamatinding pamantayan sa kalidad. Sinusuri rin namin nang mabuti ang bawat yugto ng proseso ng produksyon, mula sa pagpili ng hilaw na materyales. Ang mga singsing na bakal ay sinusubok gamit ang 5x5 na layout ng mga gulong upang matiyak ang kanilang mataas na lakas, tibay, at tiyak na mga sukat. Ang aming koponan ng serbisyo sa customer ay may karanasan, gumagamit ng 5x5 na layout ng mga gulong, at mapagmalasakit. Kakayahang magbigay kami sa inyo ng mabilis at de-kalidad na serbisyo, man ito mang bago pa o pagkatapos ng pagbili. Nauunawaan namin na ang bawat pangangailangan ng customer ay 6x5 5 wheels at nagbibigay kami ng malawak na hanay ng mga personalisadong serbisyo. Anuman ang iyong mga teknikal na detalye, istilo, at mga kinakailangan sa pagganap, maaari naming idisenyo ang mga singsing na tumutugon sa iyong personal na pangangailangan.Makipag-ugnayan sa akin kaagad kung may mga problema!
6x5 5 wheels
Mga materyales ng pinakamataas na kalidad na ginamit sa 6x5 5 wheels

Saan makikita ang pinakamahusay na mga deal sa 6x5 5 wheels

Paano pumili ng tamang sukat at estilo ng 6x5 5 wheels

Ano ang nagtatakda sa aming 6x5 5 wheels bukod sa mga kakompetensya
Why choose YAOLILAI 6x5 5 wheels?
Makabagong Tim ng R&D:
Mahigpit na control sa kalidad:
Profesyonang serbisyo sa customer:
Personalisadong at Custom na Serbisyo:
Hindi makahanap ng hinahanap?
Humiling ng Quote Ngayon
Makipag-ugnay sa aming mga konsultant para sa iba pang mga produkto.Makipag-ugnayan