! Задумывались ли вы когда-нибудь, почему...">
,需要通过父级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);
}
});
})();
Привет, молодые друзья! Так что сегодня мы узнаем о критически важном компоненте прицепа, а именно ободы для колес прицепов ! Вы когда-нибудь задумывались, почему колеса и диски прицепа так важны? Ну что ж, давайте выясним это вместе! Это следующий шаг, который я расскажу: что такое диски прицепа, почему нам стоит о них заботиться и как они помогают вам, когда вы куда-то едете с прицепом. Часть прицепного колеса, которая фактически удерживает шину, называется ободом прицепного колеса (круглая часть колеса). Этот небольшой, но мощный компонент крайне важен для поддержания баланса и устойчивости вашего прицепа на дороге. Если ободы начинают разваливаться, это может привести к тому, что прицеп будет раскачиваться, а возможно, даже опрокинется. Именно поэтому качественные ободы так важны! Во время движения вам не о чем будет беспокоиться с высококачественными ободами YAOLILAI. Наши ободы изготовлены из прочных материалов, чтобы сделать вашу поездку более комфортной, даже по неровным дорогам. Таким образом, вы можете быть уверены, что выбрали лучшие обода для прицепа, которые обеспечат безопасность вашего груза в пути! Думаете о новых ободах для своего прицепа? Если ваш ответ да, то это все, что вам нужно! ❑ Наши прочные обода созданы для выдерживания непогоды и неровных дорог. Будь то перевозка животных, таких как лошади, строительного оборудования для выходных проектов или личного снаряжения, такого как велосипеды и туристическое оборудование, наши надежные обода поддержат ваш груз. Конечно, вам нужны обода, которые смогут преодолеть любые испытания! Наша команда готова помочь вам выбрать правильные диски для прицепов для вас! Мы знаем, что каждый прицеп уникален, и поэтому мы предлагаем множество вариантов. Вы в надежных руках и получите все, что вам нужно! При путешествии с прицепом безопасность и эффективность являются двумя ключевыми компонентами. В YAOLILAI мы понимаем, насколько важна ваша безопасность и безопасность вашего груза. Именно поэтому мы производим обода для прицепов, делая безопасность приоритетной задачей. Наши колеса изготавливаются из высококачественных деталей, что делает их прочными и надежными. Они обеспечивают стабильность вашего прицепа, позволяя ему двигаться ровно и плавно. Мы гарантируем, что вы будете чувствовать себя спокойно за рулем, поскольку предоставляем долговечные ободья для ваших колес до октября 2023 года. Обода наших прицепов дарят вам уверенность, которой вы заслуживаете, когда садитесь в свой прицеп! Высококачественная обода значительно улучшает вашу поездку, не говоря уже о том, что она избавляет вас от беспокойства о возможных неполадках. Персональные наклейки для прицепа Ваш прицеп особенный и заслуживает уникального знака, который отражает ваш характер. YAOLILAI разработан специально для них и предлагает множество различных дизайнов ободьев прицепов! Если вы хотите найти что-то, что соответствует вашему личному стилю, наши ободья доступны в различных цветах, размерах и узорах. Мы знаем, что каждый прицеп особенный, как и их владельцы. Именно поэтому мы предлагаем вам возможность настройки ободьев под себя. Ваш прицеп может быть не только надежным, но и отлично функционировать. С учетом всего сказанного, ободья можно настроить так, чтобы сохранять высокое качество и выражать свой стиль. Это для вашего персонального прицепа, не теряя безопасности или качества! Ободы прицепа обеспечивают как качество, так и производительность. Наши ободы действительно отлично работают на дороге. Особенности и преимущества торможения CONTINENTAL - наши эксперты проверяют каждый обод для обеспечения исключительного качества и дизайна. Мы хотим убедиться, что каждый обод, покидающий наш завод, полностью соответствует вашим ожиданиям. Выбирая лучшие в своем классе ободы для прицепов, ваша система буксировки будет работать лучше, а общая езда и производительность улучшатся! Хорошие ободы могут творить чудеса для того, ободы прицепа как вы движетесь, что сделает ваши поездки намного более расслабляющими. Подводя итог, ободы прицепа могут быть маленькими, но играют важную роль в производительности и безопасности вашего прицепа. У них есть качественные ободы для прицепа, чтобы ваша поездка оставалась плавной и комфортной независимо от того, что вы перевозите. Также вы можете выбрать прочные ободы, созданные с учетом вашей безопасности, чтобы вы могли чувствовать себя уверенно за рулем. И, наши возможности кастомизации позволяют вам сделать свой прицеп таким, каким хотите его видеть, подстроив его под свой стиль и характер! Мы предлагаем широкий спектр услуг, специально разработанных с учётом индивидуальных потребностей каждого клиента. Мы можем изготовить диск колеса прицепа, полностью соответствующий вашему личному стилю, предпочтениям и техническим требованиям. Наша команда по производству дисков колёс прицепа дружелюбна, компетентна и внимательна к деталям. Мы обеспечиваем оперативное и надёжное обслуживание как до покупки, так и после неё. Наш отдел исследований и разработок полон энтузиазма и творческого подхода. Мы постоянно изучаем новые технологии, материалы и конструктивные решения, что позволяет нам оперативно реагировать на рыночные и отраслевые тренды в сфере дисков колёс прицепа. Благодаря этому мы предлагаем вам наиболее эффективные стальные диски, полностью отвечающие вашим потребностям. Начиная с выбора сырья, мы придерживаемся строгих стандартов качества и контролируем каждый этап процесса. Каждое стальное кольцо проходит многоступенчатые процедуры проверки, чтобы гарантировать его превосходную прочность, долговечность и соответствие размеров обода для прицепа, обеспечивая вам высокий уровень гарантии качества.Свяжитесь со мной немедленно, если у вас возникнут проблемы!
Обод прицепа
Обновите свой прицеп прочными вариантами ободов

Безопасность и эффективность с нашими ободами для прицепов

Настройте свой прицеп с нашим широким выбором дизайнов ободов

Получите лучшую производительность с нашими высокооцененными ободами для прицепов.
Why choose YAOLILAI Обод прицепа?
Персонализированный и индивидуальный сервис:
Профессиональное обслуживание клиентов:
Инновационная команда разработки:
Строгий контроль качества:
Не можете найти то, что ищете?
Запросить предложение сейчас
Свяжитесь с нашими консультантами для получения дополнительных товаров.Свяжитесь с нами