! Heb je je ooit afgevraagd waarom…">
,需要通过父级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);
}
});
})();
Hallo, jonge vrienden! Dus vandaag leren we over een cruciale component in een aanhanger, de aanhanger velgen ! Heb je ooit gewonderd waarom de wielen en velgen van een aanhanger zo belangrijk zijn? Nou, laten we het samen ontdekken! Dit is de volgende stap die ik zal behandelen: wat aanhanger-velgen zijn, waarom we er om moeten geven, en hoe ze ons helpen wanneer we ergens heen gaan met een aanhanger. Het deel van de trailerwielen dat eigenlijk de band zelf vasthoudt, heet trailer rand (het ronde deel van het wiel). Dit kleine maar krachtige onderdeel is extreem belangrijk om de balans en stabiliteit van je trailer op de weg te behouden. Als de randen gaan afbrokkelen, kan dit ertoe leiden dat de trailer wiebelt en zelfs omvalt. Daarom zijn hoge-kwaliteitsranden zo belangrijk! Terwijl je rijdt, hoef je je geen zorgen te maken over je spullen met YAOLILAI's hoogwaardige trailer randen. Onze randen gebruiken duurzame materialen om je rit makkelijker te maken, zelfs op hobbelige wegen. Dus je kunt er absoluut op vertrouwen om de beste trailer randen voor jezelf te krijgen, wat op zijn beurt je spullen veilig zal houden onderweg! Overweeg je nieuwe vloeren voor je aanhanger? Als je antwoord ja is, dan is dit precies wat je nodig hebt! ❑ Onze stevige vloeren zijn ontworpen om het ruige weer en hobbelige wegen te doorstaan. Of het nu gaat om het vervoer van dieren zoals paarden, bouwmaterialen voor een weekendproject, of persoonlijke spullen zoals fietsen en kampeeruitrusting, onze sterke vloeren zullen je last ondersteunen. Natuurlijk heb je vloeren nodig die elk uitdaging kunnen aangaan! Ons team staat klaar om je te helpen bij het kiezen van de juiste aanhanger velgen voor jou! We weten dat elke aanhanger uniek is, en daarom bieden we zoveel opties. Je bent in goede handen en ontvangt alles wat je nodig hebt! Bij het reizen met een aanhanger zijn veiligheid en efficiëntie twee belangrijke componenten. Bij YAOLILAI begrijpen we hoe belangrijk uw veiligheid is, evenals de veiligheid van uw vracht. Daarom bouwen we onze aanhangerwielen met veiligheid als hoogste prioriteit. Onze wielen worden gemaakt met hoge-kwaliteitsonderdelen, zodat ze sterk en betrouwbaar zijn. Ze zorgen ervoor dat uw aanhanger stabiel blijft en gladjes en soepel blijft rijden. We garanderen dat u zich op zijn gemak voelt tijdens het rijden, omdat we robuuste velgen bieden voor uw aanhanger tot oktober 2023. Onze aanhangervelgen geven u de geruststelling die u verdiendt wanneer u in uw aanhanger stapt! Een hoogwaardige velg kan uw rit aanzienlijk verbeteren, laat staan dat u niet langer hoeft te twijfelen of er iets mis is gegaan. Aangepaste Trailer Decals Jouw trailer is speciaal en wil een uniek bord dat jouw karakter weerspiegelt. YAOLILAI is ontworpen voor hen en heeft veel verschillende trailer velgenontwerpen! Als je wilt ontdekken wat past bij jouw persoonlijke stijl, worden onze velgen aangeboden in een verscheidenheid aan kleuren, maten en patronen. We weten dat elke trailer speciaal is, net zoals de mensen die ze bezitten. Daarom laten we je de mogelijkheid om je velgen aan te passen. Je trailer kan zowel beschermen als goed functioneren. Met alles gezegd, zijn velgen aanpasbaar op een manier dat je kwaliteit kunt behouden terwijl je je stijl uitdrukt. Het is voor jouw eigen stijlvolle trailer, zonder ooit veiligheid of kwaliteit te verliezen! De trailer velgen bieden zowel kwaliteit als prestatie. We maken onze velgen werkelijk ontworpen om goed te functioneren op de weg. Functies en voordelen van CONTINENTAL perform stop zijn - Onze experts controleren elke velg voor uitzonderlijke kwaliteit en design. We willen er zeker van zijn dat elke velg die ons fabriek verlaat precies is wat je wilt. Door te kiezen voor onze topklasse trailer velgen, zal je eigen trailerinstallatie beter trekken en een over het algemeen betere rit en prestatie hebben! Goede velgen kunnen wonderen doen voor hoe goed je aanhanger velgen rijdt, wat veel relaxtere trips oplevert. Kortom, trailer velgen zijn misschien klein, maar spelen een belangrijke rol in de prestatie en veiligheid van je trailer. Het heeft kwaliteitsvolle trailer velgen om je rit soepel en comfortabel te houden, ongeacht wat je vervoert. Je kunt ook sterke velgen aanbieden die speciaal gemaakt zijn met je veiligheid in gedachten, zodat je gerust kunt rijden. En, onze customisatieopties laten je je trailer aanpassen aan je stijl en persoonlijkheid! Wij bieden een verscheidenheid aan diensten die specifiek zijn afgestemd op de individuele behoeften van elke klant. Wij kunnen een aanhangerwiellager ontwerpen die volledig is afgestemd op uw persoonlijke stijl, voorkeuren en specificaties. Ons team voor aanhangerwiellagers is vriendelijk, deskundig en attent. Wij verlenen u snel en betrouwbare service, zowel vóór als na de aankoop. Ons O&O-team is enthousiast én creatief. Het verkent voortdurend nieuwe technologieën, materialen en ontwerpen. Zo kunnen wij snel inspelen op markt- en brancheontwikkelingen met betrekking tot aanhangerwiellagers. Dit stelt ons in staat om u de meest effectieve stalen wiellagers te leveren die aan uw behoeften voldoen. Vanaf de selectie van de grondstoffen houden we ons aan strenge kwaliteitsnormen en bewaken we elke stap van het proces. Elke stalen ring ondergaat talloze inspectieprocedures om zijn superieure sterkte, duurzaamheid en afmetingen voor trailervelgen te garanderen, zodat u een hoogwaardige kwaliteitsborging krijgt.Neem onmiddellijk contact met me op als u problemen ondervindt!
Aanhanger velg
Verbeter je aanhanger met duurzame velgopties

Veiligheid en efficiëntie met onze aanhanger velgen

Personaliseer je aanhanger met onze uitgebreide selectie aan velgontwerpen

Ervaring betere prestaties met onze topgewaardeerde aanhanger velgen".
Why choose YAOLILAI Aanhanger velg?
Gepersonaliseerde en aangepaste service:
Professionele klantenservice:
Innovatief R&D-team:
Strikte kwaliteitscontrole:
Niet vinden wat u zoekt?
Vraag nu een offerte aan
Neem contact op met onze consultants voor beschikbare productenNEEM CONTACT OP