을 사용하여 차량을 업그레이드하고 싶다면 YAOLILAI에서 최고의 제품 목록을 확인하세요...">
,需要通过父级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);
}
});
})();
뛰어난 품질의 20인치 단조 트럭 휠 리ム 를 사용하여 차량의 성능을 업그레이드하고자 한다면, YAOLILAI가 품질과 스타일 면에서 최고의 제품 목록을 제공합니다. 당사의 단조 제품은 도매 가격으로도 이용 가능합니다. 포크리프트 휠 리ム 특정 차량의 휠 핏과 필요한 브레이크 클리어런스에 정밀하게 맞춰 설계되었습니다. 자동차 정비소 사장님인지, 아니면 본인 차량을 멋지게 꾸미고자 하는 자동차 애호가이신지 여부와 관계없이, 당사의 림(rims)이 귀하의 요구를 완벽히 충족시켜 드릴 것입니다. YAOLILAI는 도매 고객님들의 비용이 중요한 고려사항임을 잘 알고 있습니다. 그래서 저희는 20인치 단조 휠을 합리적인 가격으로 제공함으로써, 원하는 휠을 더욱 매력적인 예산 내에서 구입하실 수 있도록 하고 있습니다. 이 휠들은 매우 견고하며 실제 환경에서 철저한 테스트를 거쳤습니다. 또한, 시장의 다른 제품들에 비해 상당히 낮은 비용으로 여러 대의 차량을 동시에 업그레이드할 수 있도록 가격을 책정하여, 최고의 가성비를 제공합니다. 당사의 20인치 단조 휠은 능력 있는 분들을 위해 제작되었습니다. 고품질 소재로 제작되어 오랜 내구성을 보장합니다. 이 휠림은 기존 휠림보다 주름 및 균열에 대한 내구성이 향상되어 탄탄하고 견고합니다. 운전을 즐기며 차량에 최고의 성능을 기대하는 애호가들에게 이상적입니다. YAOLILAI 휠림을 사용하면, 혹시라도 휠이 파손되더라도 교체해 드리므로 자신감 있게 주행할 수 있습니다. 어떤 환경에서도 가장 부드러운 주행 감각과 끝까지 버텨주는 휠을 경험할 수 있다는 점을 확신하셔도 좋습니다. YAOLILAI는 외관이 중요하다는 것을 알고 있습니다. 듀얼리 휠에서 드래그 레이싱 리어 휠까지, 귀하의 차량에 어울리는 세련되고 맞춤형 디자인을 찾을 수 있습니다. 이러한 슬림하고 모던한 휠림은 어떤 차량에도 더욱 고급스럽고 스포티한 외관을 선사합니다. 차량을 다른 차들과 차별화하고 싶다면, 당사의 FOLD FORGED 휠림이 바로 그 해답입니다. 단순히 외관만 멋진 것이 아니라, 모든 운전자들이 꿈꾸는 성능도 자랑합니다. 다양한 마감 처리와 디자인이 제공되어 귀하의 차량에 완벽하게 어울리는 제품을 반드시 찾을 수 있습니다. 광택 마감, 무광 마감 또는 브러시드 메탈과 같은 특수 질감 등 원하는 스타일을 YAOLILAI에서 만나보세요. 당사의 다양한 제품 라인업을 통해 고객의 요구 사항을 충족시키거나 본인의 차량을 원하는 대로 꾸미는 데 보다 쉽게 대응할 수 있습니다. YAOLILAI는 '고객 우선'을 단지 구호가 아닌 핵심 가치로 삼고 있습니다. 당사 직원들이 귀하의 차량에 가장 적합한 휠을 선택하도록 도와드립니다. 주문을 신속하게 처리하여 가능한 한 빨리 휠을 차량에 장착할 수 있도록 최선을 다하고 있습니다. 세계 최고의 공급업체로부터 공급되는 20인치 단조 휠 분야에서 당사는 최고의 선택지입니다. 빠른 배송과 친절한 고객 서비스 덕분에 귀하의 20인치 단조 휠 구매처 1순위가 될 것입니다. 원재료 선택부터 최종 제품 완성까지, 당사는 엄격한 품질 기준을 준수하며 생산 공정의 각 단계를 철저히 관리합니다. 모든 스틸 림은 고품질, 내구성, 정확한 치수를 보장하기 위해 다양한 검사 과정을 거칩니다. 당사는 높은 품질을 확실히 보증합니다. 당사의 고객 서비스 담당 직원들은 경험이 풍부하고 전문적이며, 20인치 단조 림에 대한 깊은 전문 지식을 갖추고 있습니다. 구매 전 상담이 필요하든, 구매 후 애프터서비스가 필요하든 관계없이, 신속하고 신뢰할 수 있는 서비스를 제공하여 고객께서 안심하고 이용하실 수 있도록 지원합니다. 우리는 각 고객의 니즈가 고유하다는 점을 이해하며, 20인치 단조 휠을 제공하고 폭넓은 맞춤형 서비스를 제공합니다. 사양, 스타일, 성능 요구사항이 어떠하든 간에 귀하의 개인적 요구사항을 충족시키는 휠을 설계해 드릴 수 있습니다. 당사의 20인치 단조 휠 팀은 열정적이고 창의적이며, 끊임없이 새로운 기술, 소재 및 디자인을 탐구하고 있습니다. 이를 통해 산업 및 시장 동향에 신속히 대응할 수 있으며, 귀하의 요구사항을 충족시키는 최고 품질의 스틸 휠을 제공해 드립니다.문제가 생기면 즉시 연락해 주세요!
포지드 20 인치 리ム
도매 구매자를 위한 프리미엄 성능과 내구성

세련되고 스타일리시한 단조 휠로 경쟁사와 차별화하세요

모든 도매 구매자의 취향에 맞는 다양한 마감 처리와 디자인 중에서 선택 가능

모든 도매 주문에 대해 최고 수준의 고객 서비스와 빠른 배송을 경험해 보세요
Why choose YAOLILAI 포지드 20 인치 리ム?
엄격한 품질 관리:
전문 고객 서비스:
맞춤형 서비스:
혁신적인 연구개발팀:
원하는 내용을 찾지 못하셨나요?
지금 견적 요청하기
더 많은 이용 가능한 제품은 전문가와 상담해 주세요.문의하기