téh mungkin anu anjen cari! teu ngan ukurangna leuwih gede ti roda biasa...">
,需要通过父级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);
}
});
})();
Jika sampeyan pengen supaya truk sampeyan tetepek jeung beda, ya YAOLILAI ban mobil mungkin nyaéta apa anu sampeyan cari! Tek gaduhna tinimbang pinggir biasa, tapi ogé leuwih kuat banget. Ieu ngartianna sareng bisa bawa beban leuwih gede, sarta ngebantu truk sampeyan ngabagi kinerja leuwih bagus dina jalan. Henteu lamun ngasih tampilan truk sampeyan leuwih bagus kalawan desainnye nu kilap sarta sejuk, tapi ogé ngasi kasepik manfaat anu bisa benar-benar ngebantu sampeyan pas nyetir atawa nembok barang. YAOLILAI paham kana pentingna roda baku jeung kualitas tinggi pikeun truk anjeun. Itu katinaan kami mibanda varietas anu luas tina roda truk nu dirancang pikeun kuat dina jangka panjang. Kami ngagunakeun material baku jeung kuat pilihan dina roda kami nu ngoptimalkan performa jangka panjang, jadi anjeun paham kalau roda kadang bakal ngasilkeun tenaga anu dibutuhkeun dina kondisi kompleks sarta pakean terus-terusan. Entar anjeun nyetir dina jalan tol atawa off-road dina jalan belakang, roda kami didesain pikeun petualangan terbaik anjeun. Kekuatan dari Big rig rims adalah salah satu alasan mengapa kamu ingin memilihnya. Ini YAOLILAI pingit besi disebut kusus pikeun bawa beban anu berat, nyaeta, sareng ogé ngabogaan tenaga sarta kestabilan truk anjeun kaluar jalur. Ia ngidinan anjeun pikeun nampa bobot anu leuwih tanpa takut truk anjeun bakal tegang. Anjeun bakal bisa nyetir deui jeung rasa percaya diri, ngalor-ngidulna truk anjeun siap pikeun apa aja anu bakal hadir. Peuteuman rim truk gede ogé bakal ngahasilkeun penanganan anu leuwih baik pikeun truk anjeun sahenteu nyetir. Kontak patch anu gede: Kalau anjeun pernah nyetir di luhur ban anu lebar, anjeun bakal tiasa anu ieu leuwih bagus sabab ia kontak denganeun jalan leuwih banyak sabab ukuranna anu gede tibate dasar rim anu dipaké orang. Ia ngahasilkeun kestabilan sarta traksi anu leuwih baik dina kondisi basah atawa licin. Mina jeung kenyamanan nyetir dina bermacam kondisi cuaca, anjeun bakal rasana aman sarta nepat, nu ngahasilkeun perjalanan anu lancar sarta menarik. Pinggir teuas bakal ngahasilkeun tampilan anyar jeung segar keur truk anjeun lamun itulah anu anjeun cari. Aya sababaraha gaya, warna, sarta finising nu béda-béda pikeun pinggir ieu, jadi anjeun bisa pilih anu anjeun paling suka. Pasti aya pinggir teuas nu cocog keur selera anjeun, saméméh anjeun nyari tampilan cemerlang, modern, atawa gagah keur truk, sarta anjeun bisa yakin truk anjeun bakal nampak keren. Pinggir teuas bakal bantos ngabuatkeun orang-orang ngelirik sarta ngadiahkeun perhatian lamun itulah anu anjeun cari. Iteungna biasana leuwih gede sarta leuwih ngejér keur dipandengkeun tibate pinggir biasa. Tempat teu afdol; anjeun bakal diakui sarta dihargai keur selera éksklusif anjeun dina truk. Pinggir Teuas - Saméméh di jalan raya, atawa dina tempat parkir, truk anjeun bakal nongkeun dirianna deui kaasupna pinggir teuas. Tujuna kitu di YAOLILAI nyaéta pikeun membantu pelanggan kitu manggihkeun poténsi maksimal tina truk anjeun. Naha kapingin kitu nyadiakeun rangkéhan produk YAOLILAI pinggir roda truk nu dijieun keur kinerja nu luar biasa. Pinggir anu kami disain pikeun bertahan dina kondisi paling kasar, kami janji henteu bakal gagal meski dicoba ku ujian metal berat. Ngaruh duit dina pinggir deungkul kualitas tinggi kami nyaéta salah sahiji pilihan paling baik sarta cadas anu bisa kaanda percaya. Kami gaduh tim R&D anu highly motivated (sangat dipikadua) sareng kreatif anu terus-menerus ngalakonan éksplorasi téknologi anyar, bahan anyar, sareng désain anyar. Kami tiasa réaksi cepter kana tren pasar sareng industri. Hal ieu nyebabkeun kami tiasa nyadiakeun anjen roda truk gedé anu pangsaéna anu bakal panto kaperluan anjen. Tim roda truk gedé kami ramah, pinter, sareng peduli. Kami tiasa nyadiakeun layanan anu cepter sareng dipercaya, baé dina waktos sabelum pembelian atanapi saatos jualan. Roda truk gedé ngartos yén sababaraha kaperluan unik ti unggal palanggan béda-beda, sarta kami nyadiakeun macém-macém layanan anu dipersonalisasi. Kami tiasa ngadamel cincin anu cocog jeung gaya, désain, sareng kaperluan anjen. Dari pemilihan bahan baku, kami mematuhi standar ketat untuk kualitas dan pengendalian proses Big rig rims. Setiap cincin baja melewati beberapa pemeriksaan untuk memastikan kekuatan maksimal, daya tahan, dan dimensi yang presisi, menjamin bahwa kamu mendapatkan jaminan kualitas yang andal.KONTAK KU LANGSUNG JIKA ANDA TEMUI MASALAH!
Big rig rims
Alami Kagahatan Big Rig Rims

Ubah Trukmu dengan Big Rig Rims

Diperhatian di Jalan dengan Big Rig Rims

Lepas Potensi Trukmu dengan Big Rig Rims
Why choose YAOLILAI Big rig rims?
Tim R&D Inovatif:
Layanan pelanggan profesional:
Layanan yang Disesuaikan dan Dipersonalisasi:
Kontrol kualitas ketat:
Teu meunangkeun naon anu anjeun pilari?
Ménta A Quote Ayeuna
Kontak konsultan urang pikeun produk anu sayogi langkung seueur.Puntina Kami