Haté di roda éta lucu sareng maringkén mobil anjeun sentuhan kasih sayang pribadi. Kalayan disain haté anu lucu, roda unik ieu cocog pisan...
">
,需要通过父级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);
}
});
})();
"Tempel Hatimu di Rodamu": Ieu bisa jadi bagus kanggo kendaraan anjeun lol Gading kénéh di luhur mobil anu imut sarta ngasih sentuhan kasih sayang pribadi kana mobil anjeun. Dengan desain gading nu imut, gading kénéh ieu anu unik sacara henteu cocog kanggo geus nu benar-benar cinta mobil anjeun. Panduan lengkep ieu bakal ngabagi kuring kabar kapan aya ngeunaan gading gading, sarta secepatna carana pikeun nyieun dina mobil kesayangan anjeun. Makéna, baca lan jalan sareng perjalanan nu seru tina Panduan Gading Gading Kénéh Utama Kanggo Mobil Anjeun! Roda hati mangrupa cara anu luar biasa pikeun ngasupkeun perjalanan anjeun jeung kaca spesial - cinta anu aya di dina. Mereka teu cuma bisa ngabuat tampilan mobil anjeun unik sarta dipersonalisasi, tapi ogé ngahasilkeun cara pikeun nyorongkeun sedikit sifat anjeun dina batas anu ditetepkeun ku etiketa ngebul nu biasa ogé. Roda hati mangrupa karya anu indah anu hadir dina sababaraha desain pikeun cocog jeung sakumit gaya anu anjeun mungkin pilih. Desain terinspirasi hati dina palet sarta corak nu berbeda geus umum, salaku ogé potongan anu leuwih rumit kaya bunga atawa bitang nu ngahasilkeun roda anjeun kacida imajinatif. Kaasup akal sareng pilihan anu leuwih kanggo roda romantis, lamun kuring ngareksa desain hati roda anu sempurna. Model anu paling populer nyaéta anu anu mibanda dua hati anu saling kait, sarta makéhna ngajadikeun hubungan anu dansa antara 2 bagian. Rims anu dibikin indah ieu mangrupa cara pikeun ngajadian mobil anjeun leuwih romantis sarta saeutik, ogé, lagu kasayangan. Favorit kita keur nganterna nyaéta hati jeung sayap anu nangtukeun nu unik atawa personal kana hadiah anu. Sampean ogé tiasa pilih bentuk hati anu dilubangi dina roda pikeun desain sejen, nu akany kaasup mobil sampean sareng kilatan anyar. Lamun sampean gawat nyieun roda hati dina mobil sampean pikeun ngasih liwat gaya sarta romantis liwat, naheta tip penting sarta inspirasi pikeun rujukan sampean. Pertama, sampean perlu ngelirik ukuran roda sarta pastikeun ia ngasih mobil sampean sikap agresif anu bagus. Atawa, lamun sampean geus ngajaga skema warna mobil sampean, pilih roda anu cocog kasianya bakal ngahasilkeun tampian anu leuwih terkoordinasi. Misalna, lamun mobil sampean warna merah api, pilih roda hati merah anu cocog bakal ngahasilkeun tampian anu gagah sarta konsisten. Cara kreatif lain pikeun nyieun mobil anjeun tiasa ngagunaan roda hati nyaeta ku ngagunaan stiker atawa label hati dina bagian-bagian beda tina kendaraan. Stiker hati cilik dina cermin sabak atawa buntut belakanan efektif dina pola dekorasi romantis anjeun, ngebuat dekorasi nu harmonis. Dadia jeung ka ieu nyaeta unggulan teranyar dina roda mobil personalisasi, ngasih anjeun pilihan pikeun jadi kekinian sarta beda pikeun nambahkeun sedikit asyik sarta romantis dina mobil anjeun. Sama aja, tipe-tipe beda saperti desain roda custom ditawikeun salaku hati roda kanggo anjeun pilih. Ngan geus anjeun suka spinners atawa lampu LED, opsi customisasi anu bisa dipake hampir takterbatas sahingga bisa dibeda-bedakeun roda mobil anjeun. Luhur kaharti anjeun pikeun mendesain balang-balangan, eta nyaeta spesialis dina palang mobil nu anjeun kudu pilih. Para profesional ieu bisa ngajiane anjeun nasihat ahli pikeun pilih roda terbaik kanggo mobil anjeun, sarta ngabantu jeung spesifikasi saperti pasang sarta penampilan. Milih roda sempurna kanggo mobil anjeun cuma awal saka sababaraha kesempatan kanggo ngacara. Dumasar kana cat adomanyang anyar, stiker keren, atawa malah nyarios sistem hisap nu leuwih baik, aya sabaraha pilihan sahenteuna kapajanan modifikasi mobil. Dina kabehna, abdi mangga pikir roda hati ngahasilkeun asbaga opsi kencana jeung romantis kanggo tampilan mobil anjeun. Ngan anjeun pengen nampilkeun kasayangan anjeun kana seorang nu husus atanapi cuma ngabogaan tampian mobil anjeun, roda hati nyaeta opsi bagus. Mangga ngasih mobil anjeun sedikit kasih sayang ti hati! Tim rim haté kami géntar sareng imajinatif, sarta terus ngalakukeun éksplorasi téknologi anyar, bahan-bahan anyar, sareng disain anyar. Kami tiasa réaksi cepter kana tren indusri sareng pasar. Ieu nyebabkeun kami tiasa nyadiakeun anjeun cincin baja pangsaéna pikeun ngahontal kabutuhan anjeun. Kami nyadiakeun rupa-rupa layanan anu dikustomisasi sacara spésifik pikeun kabutuhan unik unggal palanggan. Naha anjeun butuh rim haté, disain, atanapi kinerja, kami bakal ngadisain cincin anu sesuai jeung kabutuhan pribadi anjeun. Kami geus ngadirikan staf layanan anu kompeten, antusias, sareng perhatian pikeun palanggan. Naha éta konsultasi saméméh pembelian atanapi rim haté pasca-pembelian, kami tiasa nyadiakeun layanan anu cepter sareng profesional supaya anjeun teu aya kéwaswasan. Tina pilihan bahan baku, urang ngalaksanakeun standar kualitas anu ketat sarta ngawasaan prosésna. Sababaraha cincin baja lewat sababaraha pamariksaan pikeun mastikeun kakuatan, kacida tahan lama, sareng dimensi anu presisi paling tinggi, pikeun mastikeun yén anjeun mendakan jaminan kualitas anu dipercaya.KONTAK KU LANGSUNG JIKA ANDA TEMUI MASALAH!
roda hati
Manggeuh Roda Hati kana Naikanna: Ngabungkeun Cinta jeung Karakter

Roda Romantis Terbaik: Cinta dina Setiap Belokan

Ungkapan Berharga kana Roda Hati: Pujian jeung Isarat

Trend Baru dina Roda Mobil Custom : Angkat Gaya Mu
Why choose YAOLILAI roda hati?
Tim R&D Inovatif:
Layanan yang Disesuaikan dan Dipersonalisasi:
Layanan pelanggan profesional:
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