…">
,需要通过父级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);
}
});
})();
Одним из лучших решений, которые вы можете принять для улучшения стиля и производительности вашего автомобиля, является переход на новую комплектацию колес. автомобильных дисков выбор идеальных колес для вашего транспортного средства может быть увлекательным и вознаграждающим процессом. В JC Whitney представлены различные размеры, цвета и дизайны, немногие дают вам возможность индивидуализировать ваш автомобиль таким экономически эффективным способом, как фары. Многие любители автомобилей предпочитают 20-дюймовые колеса для своей машины. Эти колеса YAOLILAI особенно популярны, так как они создают ощущение элегантности и стиля, при этом оставаясь достаточно сдержанными. Помимо того, что эти колеса отлично заполняют пространство в арках, комплект из пятнадцати 52-х делает идеальную работу по сочетанию формы и функциональности для тех, кто хочет получить и стиль, и скорость. мир 20-дюймовых колес - каждый на свой вкус. Взгляните на колеса VMB9 от Velgen Wheels, доступные в нескольких цветах - выберите тот, который лучше всего подходит вашему автомобилю. Между тем, обод колеса TSW Bathurst с технологией DST Hybris обеспечивает повышенную производительность и предлагается в черном или серебристом исполнении, чтобы подчеркнуть спортивный и стильный вид. Вы не только выбираете колеса правильного размера и типа, но сегодня как никогда раньше можно выразить свою индивидуальность через кастомизацию для любителей автомобилей! От выбора цветов и покрытий до логотипов и т.д. существует множество вариантов, которые помогут сделать комплект дисков по-настоящему уникальным. Онлайн-магазины автодоставок предоставляют идеальное решение для тех, кто хочет получить качественные колеса без огромных затрат. Просто прочитайте отзывы и выберите надежного продавца, и вы сразу получите их по лучшей цене. Эти литые алюминиевые колеса являются доступной легковесной альтернативой обычным алюминиевым. Поддержание безупречного вида колес как можно дольше может помочь продлить их жизнь. Необходимо правильно мыть колеса, так как грязь и слякоть со временем могут повредить покрытие. Избегайте использования агрессивных чистящих средств, так как они могут повредить колеса. Защитные покрытия для колес. Хотя защитная пленка для колес — отличное изобретение, это может не быть самым доступным вариантом для тех, кто ограничен бюджетом или сталкивается с жесткими дорожными условиями. Таким образом, улучшение колес — это простой и быстрый способ улучшить как внешний вид, так и производительность вашего автомобиля. Однако, выбрав их мудро и бережно ухаживая за ними, вы сможете продлить срок их службы. Поэтому наслаждайтесь возможностью оживить свой автомобиль новым набором колес и отправляйтесь в путь, чувствуя себя уверенно и великолепно! Помимо выбора подходящего размера и типа колес YAOLILAI, существует бесконечное множество дизайнерских решений, которые вы можете принять для завершения оформления вашего автомобиля. Часто одним из самых простых способов придать вашим колесам индивидуальность является нанесение уникального покрытия, дополненного яркими цветами и долговечностью: порошковое покрытие без сомнения популярно благодаря устойчивости к царапинам/щепкам/УФ-повреждениям. Двухцветная или даже многоцветная схема с использованием разных цветов и текстур также идеально подходит для тех, кто хочет быть замеченным. The колесного диска автомобиля центральная гильза из сплава может быть изготовлена для отображения любой из тех же знаков безопасности или корпоративных логотипов, а также информации о размере колеса clomid nolva, доступной как наклейка на колесах, что делает это еще одним элегантным способом сделать ваши диски уникальными. Используя этот метод, вы можете добавить собственную надпись или даже изображение вашего логотипа прямо на поверхность колеса, сделав его очень уникальным и непохожим на другие решения по внешнему виду этих колес. Несмотря на то, что не все могут позволить себе бесконечно обновлять свой автомобиль, в YAOLILAI есть множество источников для покупки качественных 20-дюймовых колес. Еще более эффективная стратегия — это покупка онлайн у оптовиков автозапчастей, так как большинство из них предлагают низкие цены на колеса/чехлы. Убедитесь, что вы прочитали отзывы перед покупкой и проверили репутацию продавца. Если так, вы можете сэкономить, выбрав литые алюминиевые диски вместо более дорогих кованых алюминиевых вариантов. Хотя они обода и шины не обеспечивают такой же легкий вес и элегантную производительность, как их более дорогие аналоги, они также предлагаются по цене менее чем в половину от стоимости последних. Преимущества и недостатки различных размеров колес для вашего автомобиля. Подводя итог, это очень общий обзор плюсов и минусов различных размеров колес: колеса диаметром 16 дюймов: как правило, самые доступные по цене, они простые и незамысловатые. Однако, скорее всего, они не обеспечат того же уровня производительности или внешнего вида, что и более крупные размеры. колеса диаметром 18 дюймов: стальные диски золотая середина среди диаметров колес, они предлагают лучшую производительность без чрезмерной роскоши и базу, которая не будет слишком дорогой для замены, если они повредятся. колеса диаметром 20 дюймов: размер, который часто считается идеальным для тех, кто хочет выглядеть хорошо и чувствовать себя комфортно с точки зрения качества езды и управляемости. Цены далеко не экономичны, но они обеспечивают хорошее равновесие между производительностью и привлекательностью. После того как вы вложили немалую сумму в стильные диски диаметром 20 дюймов, крайне важно правильно их хранить, чтобы ваш новенький аксессуар не утратил блеска уже через несколько месяцев. Продолжайте чтение и ознакомьтесь с экспертными рекомендациями по поддержанию безупречного внешнего вида ваших дисков. Регулярная очистка дисков: Возможно, это кажется самоочевидным, однако регулярная очистка дисков необходима для удаления пыли, грязи и тормозной пыли, которые со временем могут повредить защитное покрытие. Избегайте агрессивных чистящих средств: для очистки дисков используйте мягкое мыло и воду, а не агрессивные составы, способные поцарапать поверхность. Если вы живете в регионе с суровыми погодными условиями, подумайте о покупке колпаков для колёс или защитных покрытий, которые защитят ваши колёса от зимних условий и дождя. Регулярные проверки: осматривайте все пользовательские ободы колёса на вашем прицепе для лошадей в рамках плановой проверки на наличие признаков износа или повреждений. Раннее обнаружение позволяет предотвратить развитие проблемы до более серьёзного состояния. Мы предлагаем широкий спектр услуг, специально разработанных с учётом индивидуальных потребностей каждого клиента. Мы можем изготовить диски диаметром 20 дюймов, соответствующие вашему личному стилю, предпочтениям и техническим требованиям. Наша команда специалистов по дискам диаметром 20 дюймов компетентна, хорошо осведомлена, дружелюбна и готова оказать помощь клиентам. Будь то консультация до покупки или поддержка после покупки — мы гарантируем оперативное и качественное обслуживание, чтобы вы могли быть спокойны. Наша высокомотивированная исследовательская и опытно-конструкторская (R&D) группа, специализирующаяся на дисках диаметром 20 дюймов, постоянно изучает новые материалы, технологии и дизайны. Мы способны быстро реагировать на рыночные запросы и тенденции отрасли, предлагая клиентам самые инновационные стальные диски, идеально отвечающие вашим потребностям. Мы привержены стандартам качества для дисков диаметром 20 дюймов. Мы тщательно контролируем каждый этап производственного процесса, начиная с подбора сырья. Каждое стальное кольцо проходит несколько этапов контроля качества, чтобы гарантировать его прочность, долговечность и точные геометрические размеры. Мы предоставляем надёжную гарантию качества.Свяжитесь со мной немедленно, если у вас возникнут проблемы!
обода 20 дюймов
Уникальные дизайнерские решения для вашего автомобиля

Как найти качественные колеса в рамках бюджета

Преимущества и недостатки размера колес для ваших транспортных средств

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