,...">
,需要通过父级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);
}
});
})();
Numquamne miratus es quid futurum esset ut haberetur potentia super ad videndum in tenebris? Cum Tecnologia LSJ optimus camara thermica portatilis , iam hunc somnium effecere verum potes. Custodi te et tenebas inspice cum hac caméra speciāli. Sīve noctu in castrīs consistis, sīve post solis occasum in hortō circumspicere velis, camera thermographica portabilis tibi prōficiet ut tutus sis et circumstantias cognōscās. Hāec camera calorem vidēre potest, ita tenebris omnibus obscurīs tamen vidēre poteris. Investīgā ubi calor proficiscatur cum cammerā thermographicā manu tēnendā. Numquamne sedisti et cogitavisti unde calor domī tuae veniat? LSJ Technology Incende cammaram tuam thermographicam! LSJ Technology camera imaginum thermicarum manualis pecūniam servāre potest in fīnibus energēticīs et domum tuam locum magis commodum effīcere. Prīma camera thermographica manu tēnenda. Camera LSJ Technology optima via est orbem terrārum explorandī. Amantī naturam, artificī aut curiōsō generis Renāscendentis, hāec camera multa offert quae excolere possis. Bestiās noctu venārī aut causās ignotās domesticārum machinārum reperīre potes. LSJ Technology optimus manu tenendus thermicus imaginator prorsus mirabilis est! Capi potestatem imaginum thermalium in palma tua. Technologia LSJ imaginifer Infrarubens Thermicus Manualis potest tibi adiutare ut videas schemata caloris quae normaliter videre non posse s. Hoc cam compactum et facile ad usum aperit orbem novum optionum. Ex anno 2013 LSJ manufacturam, productionem et suppeditationem instrumentorum ad altam peritiam spectantium ad quaerendum et salvandum ac ad incendia opprimenda excolit. LSJ certificata est a normis ISO9001, a manu tenentibus thermographicis cameris et a ROHS. Praeterea plus quam triginta patentia possidet. Magnopere in nostrum departmentum designi et investigationis investimus, quoniam praecipua res negotii sumus. Anno 2024 LSJ quattuor magnis eventibus interfuit: INTERSEC apud Dubaī, Securika 2024, Decimum octavum Exercitus Defensionis Asiae (DSA), Tertium Symposium de Securitate Nationali Asiae (NATSEC) in Maleisio, necnon NFPA in Civitatibus Foederatis Americae. Praeterea ad INTERSEC apud Dubaī inter dies 14–16 Ianuarii 2025 iam inscripti sumus. In hoc eventu detectorum vitae radarum, radarum tridimensionalium per parietes visibilium, detectorum gasorum, instrumentorum auditūs et vīsūs, instrumentorum stabilitātis monitoriae et camerārum thermicārum ad incendia opprimenda exhibēbimus. Vos ad nostrum gremium visitandum invītāmus. LSJ undecim annōs in manufacturā experientiam habet. Specialiter versatur in creandīs et producendīs productīs novātoriīs secundum usūs scēnāriōs clientium. Praeterea facultātēs suās continuō meliorat et impensās in prōductīs minuit. LSJ multam experientiam in urbane rēservatione atque quaerendō habet. Anno 2023, dum terremotus in Turcia accidit, detector vitae radar LSJ ad auxilium praebendum Āerī Caeruleō Sinico in rēservatione maxime fuit utilis. Elige LSJ ut solutionēs technolōgicās altissimae artis, ad tuās peculiārēs necessitātēs aptātās, accipias. Nos, qui apud LSJ laboramus, scimus quam magni momenti sit ut clientibus nostris praestemus producta summae qualitatis et manuales thermographicas camaras. Officimus garantias unius aut quinque annorum, quae fiduciam nostram in diuturnam durabilitatem ac praestantiam productorum nostrorum indicant. Magna nostra inquisitionis et evolutionis investitio certificat ut producta vestra ad summos normas conformentur. Ut fabrica manufacturaria, rigidas normas de qualitate observamus, a materia prima usque ad productionem. Sive privatus cliens, sive distributor, sive particeps licitationis, sive agencia publica estis, latissimam varietatem productorum vobis offertimus, quae ad vestras necessitates respondent. Magna est nostra copia materiae primae, componentium, et aliorum rerum, ut prompta semper expeditio garantiri possit. Si vero non tempestive expedimus, nos obligamus ut usque ad 2–50 % totius valoris ordinis clientibus nostris restituamus. Instructiones minuta et videos vobis praebemus, quae vobis iuvabunt ut producta nostra efficaciter utamini. Praeterea, praelectiones technicas in loco, ad vestras necessitates adaptatas, instituere possumus, ut confidenter et facile producta nostra uti possitis. Eligitote LSJ pro productis summae qualitatis et fidelitate, atque pro egregia clientela cura. Apud LSJ periti sumus in developmente praestantissimorum instrumentorum pro urbane quaerendo et salvando, quae ad summas internationales normas conficiuntur. Servitium ante venditionem: Adiuvamus vos ab initio. Consultationes amplas praebemus, ut vestra desideria cognoscamus et solutiones elaboraremus. Praeterea praebemus camaras thermographicas manuales cum productis et specificatis technicis, quae accurate describuntur, ut omnia necessaria ad bene informandam decisionem vestram habeatis. Servitium in venditione: In ipso venditionis processu experientiam vobis lenem et efficacem praestabimus. Garantimus quod merces vestrae tempore adveniant, integrae, propter nostrum efficax ordinis systema et severum controllem qualitatis. Etiam praebemus delivationem a porta ad portam. Servitium post venditionem: Relatio nostra vobiscum non finitur postquam merces nostras accepistis. Noster comprehensivus subsidium post venditionem includit auxilium in installatione, educationem utentium et curam. Habemus aequipe customer support paratam 24 horas in die, quae quascumque dubitationes vel difficultates solvere potest et vestram satisfactionem garantit. Triennalem garatiam in omnibus instrumentis a LSJ emptis praebemus. Etiam servitia post venditionem ab nobis accipere poteritis. Electio LSJ significat quod fiduciam, altam qualitatem, praestantissimam qualitatem et auxilium incomparabilem eligitis. Exspectamus ut socii vestri simus in urbane quaerendo et salvando, necnon in incendiis extinguendis. Servitia praebemus ad Departmenta Ignium et Salutis, ad manuales camaras thermographicas, ad urbes quaerendi et salvandi turmas, et ad varia exercitus. LSJ praebet instrumenta innovativa ad ignes opprimendos, ad quaerendum et salvandum, et ad operandum in locis explosivis per varias artes. Camarae Thermographicae ad Ignes Opprimendos. Duo genera camerarum thermographicarum designavimus et investigavimus, quae tres diversas resolutiones habent. Haec camerae temperaturas usque ad 2000 mensurare possunt. Instrumenta ad Quaerendum et Salvandum: Diversa producta offerimus, inter quae sunt detectores gasorum, monitoria stabilitatis, et systemata monitoriae motus. Camerae Thermographicae Industriales: LSJ camaras thermographicas praebet quae non solum ad ignes opprimendos, sed etiam ad aedificiorum inspectiones, ad emendationes electronicas, ad detectionem percolationum aquae, et ad inspectionem systematum HVAC utuntur. Scopae Thermographici: Scopae Visionis Nocturnae idonei sunt ad visibilitatem nocturnam. Etiam apud venatores populares sunt. Facile in fucis montantur. LSJ praebet instrumenta thermographica et ad salvandum et ad imaginem faciendam altae qualitatis, quae postulantur ab variis artibus, et quae tutelam et efficaciam negotii tui augent. Elige LSJ pro solutionibus peritissimis et fidissimis. Cura ut LSJ sit primus tuus socius ad urbana quaerenda et salvanda. Copyright © Beijing LSJ Technology Development Co., Ltd. Omnia Jura Servata
-
Politia Privati
Camera imaginum thermicarum manualis
Mane in tenebris cum portabili camera imaginum thermalium.
Revela fontes caloris occultos cum potentia manubrii camerae imaginum thermalium.

Summa camera imaginum thermalium manubrii.
Emitte potentiam imaginum thermalium in palmo tuo.
Why choose LSJ Technology Camera imaginum thermicarum manualis?
Innovando Fabricam Tectumentorum Prope Quaestionem Et Salutem Cum Alta Efficiencia
Qualitatem et Punctualitatem Consecutionis Tutamen: LSJ's Devotio ad Placitum Clientium
Cur LSJ Potest Esse Tuus Fabricator et Suppeditator Primatorum?
Supplēs Catēnās Ōmnibus Instrumentīs ad Servandōs et Recuperandōs in Urbānā Rēgīōne
Categories Producti Relatae
Non invenis quod quaeris?
Petere Citatio Nunc
Consulere nostros pro magis productis disponibilibus.Cum Nobis Contacata