này...">
,需要通过父级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);
}
});
})();
Khi bạn kéo một rơ mooc, bạn muốn đó là một trải nghiệm dễ chịu. Không ai thích một chuyến đi l颠 b簸, đặc biệt khi bạn đang chở một tải nặng. Lúc này đai cách vành lốp và vành ST145R12 phát huy tác dụng. Điều này có nghĩa là bạn sẽ cảm thấy tự tin hơn khi lái xe. Thiết kế đặc biệt của lốp giúp nó bám đường tốt hơn, điều này cực kỳ quan trọng. Một sự bám đường chắc chắn cho phép bạn lái qua các khúc cua và phanh an toàn hơn. Hãy tưởng tượng về một chuyến đi dài với rơ mooc được nối vào xe của bạn. Bạn không muốn cảm thấy lung lay hay thiếu tự tin. Lốp và vành ST145R12 mang lại nhiều sự tự tin hơn vì nó được thiết kế để giữ cho rơ mooc của bạn cân bằng. Điều này có nghĩa là bạn có thể tập trung vào việc tận hưởng chuyến đi thay vì lo lắng về cách rơ mooc của bạn hoạt động. Lốp xe và vành ST145R12 cũng rất bền và có tuổi thọ cao. Dù bạn đang vận chuyển các vật nặng cho công việc xây dựng hay kéo thuyền ra hồ để vui chơi, nó được thiết kế để đáp ứng tất cả nhu cầu vận chuyển của bạn. Từ khi mua đến khi sử dụng, sản phẩm này vành bánh xe lốp xe và vành được sản xuất từ những vật liệu bền bỉ có khả năng chịu đựng trong các tình huống khó khăn, đảm bảo bạn sẽ hài lòng với sản phẩm này, bất kể bạn đang chở gì. Khi kéo một chiếc rơ mooc, việc có độ bám đường tốt là rất quan trọng. Bạn muốn rơ mooc của mình luôn gắn kết với xe và không bị lung lay. Nhờ vào thiết kế rãnh đặc biệt, lốp xe và vành ST145R12 cung cấp cho bạn độ bám tuyệt vời. Điều này cũng có nghĩa là nó bám đường tốt hơn, cho bạn sự kiểm soát tốt hơn đối với rơ mooc khi đường ướt hoặc trơn trượt. Hãy tưởng tượng bạn đang lái xe dưới mưa hoặc trên đường trơn trượt. Nếu lốp xe của bạn không bám đường tốt, đó có thể là một trải nghiệm đáng sợ. An toàn của bạn được đảm bảo với lốp xe ST145R12 có vành với khả năng bám đường mạnh mẽ. Điều này thực sự hữu ích như thế nào, đặc biệt khi bạn lái xe trên những con đường xấu? Càng có nhiều ma sát, càng dễ dàng kiểm soát xe trên đường, điều này giúp giữ an toàn cho bạn và người tham gia giao thông khác. gói vành và lốp bạn có nhiều ma sát hơn, việc kiểm soát xe trên đường sẽ dễ dàng hơn, từ đó giúp bạn và các người dùng đường khác được an toàn. Một chiếc lốp và vành cho rơ mooc của bạn là thứ mà bạn muốn nó bền lâu. Lốp xe là một khoản chi tiêu đắt đỏ, và bạn muốn đảm bảo rằng mình nhận được giá trị xứng đáng với số tiền đã bỏ ra. Tuổi thọ lâu hơn nhờ vào việc lốp xe ST145R12 và vành được thiết kế để sử dụng trong thời gian dài. vành tùy chỉnh nó được làm từ các vật liệu cao cấp có khả năng chịu đựng những điều kiện khắc nghiệt, vì vậy bạn sẽ không cần phải thay thế chúng thường xuyên. Bây giờ, hãy nghĩ đến việc đi một chuyến đi dài cùng gia đình hoặc bạn bè. Bạn muốn mọi thứ diễn ra suôn sẻ, đúng không? Hãy cân nhắc nâng cấp lên lốp xe và vành loại ST145R12 để giúp rơ mooc của bạn di chuyển êm ái hơn. vành xe ô tô việc nâng cấp thực sự có thể cải thiện cách thức di chuyển của rơ mooc của bạn, đặc biệt khi bạn đang đi trên đường hoặc trong thời tiết xấu. Chúng tôi cung cấp nhiều dịch vụ được tùy chỉnh theo nhu cầu riêng biệt của từng khách hàng. Dù yêu cầu của bạn là gì, về thông số kỹ thuật của lốp xe và vành St145r12 cũng như kỳ vọng về hiệu suất, chúng tôi sẽ thiết kế các vành đáp ứng mong đợi cá nhân của bạn. Từ khâu lựa chọn nguyên vật liệu, chúng tôi tuân thủ nghiêm ngặt các tiêu chuẩn chất lượng và kiểm soát quy trình sản xuất lốp và vành St145r12. Mỗi vòng thép đều trải qua nhiều lần kiểm tra để đảm bảo độ bền, độ cứng cao nhất cũng như kích thước chính xác, từ đó mang đến cho bạn sự đảm bảo về chất lượng đáng tin cậy. Đội ngũ Nghiên cứu & Phát triển (R&D) của chúng tôi đầy nhiệt huyết với sản phẩm lốp và vành St145r12, đồng thời không ngừng nghiên cứu các công nghệ, vật liệu và thiết kế mới. Chúng tôi có thể phản ứng nhanh chóng trước nhu cầu thị trường và xu hướng ngành, cung cấp cho khách hàng những sản phẩm vòng thép tiên tiến nhất, đáp ứng tốt nhất yêu cầu của quý vị. Đội ngũ lốp và vành St145r12 của chúng tôi thân thiện, am hiểu chuyên môn và luôn thấu đáo. Dù là dịch vụ trước hay sau bán hàng, chúng tôi đều có thể cung cấp cho quý vị các dịch vụ nhanh chóng và đáng tin cậy.Liên hệ với tôi ngay lập tức nếu bạn gặp vấn đề!
Lốp xe và vành St145r12
Lốp xe và vành ST145R12 Chống Tải Trọng Cao cho Mọi Nhu cầu Kéo của Bạn

Trải nghiệm Khả năng Bám Đường Tuyệt Vời với Lốp Xe và Vành ST145R12

Lốp Xe và Vành ST145R12 Bền Bỉ Đảm Bảo Hiệu Suất Sử Dụng Lâu Dài

Nâng Cấp Xe Tải của Bạn với Lốp Xe và Vành ST145R12 để Có Hiệu Suất Tốt Hơn
Why choose YAOLILAI Lốp xe và vành St145r12?
Dịch vụ cá nhân hóa và tùy chỉnh:
Kiểm soát chất lượng nghiêm ngặt:
Đội ngũ Nghiên cứu & Phát triển Sáng tạo:
Dịch vụ khách hàng chuyên nghiệp:
Không Tìm Thấy Thứ Bạn Đang Tìm?
Yêu Cầu Báo Giá Ngay
Liên hệ với các chuyên gia tư vấn của chúng tôi để biết thêm sản phẩm có sẵn.Liên hệ với chúng tôi