...">
,需要通过父级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);
}
});
})();
An vero cogitavisti cur aliquid calidum videri possit, etiamsi non tangas illud? Nos autem Instrumenta Auscultationis Seismicae gratias agere debemus! Haec speciales cameras nobis adiuvant "videre" calorem modis quibus nostri oculi videre non possunt. Legite quomodo camerae thermicae LSJ Technology ad altas temperaturas opus facientes nobis possint occultos caloris mores ostendere, tutitatem et conservationem meliorem efficere, instrumenta crucialia inspicere, transferentiam caloris intellegere et imagines thermicas minutiatas colligere dum in environmentis extremis operantur! Per cameras calidas LSJ Technology possumus calorem videre qui oculo nude videri non potest. Tales cameras calorem ab variis rebus venientem possunt "videre" et nobis dicere quam calefactae sint. Hoc in multis casibus utile esse potest, velut in locis calidis in aedificiis detegendis quae incendium capere possint, vel machinis in fabricis obcalescentibus quae ad casus ducere possint. Unum ex rebus maximae magnitudinis, quae in cameris thermalibus altiorem temperaturam habentis invenimus, est accuratia mensurae temperature. Camerae LSJ Technology possunt temperature accurate metiri, celeriorem et tutiorem hominum gestionem praebendo. Per has cameras usus, mutationes rapidas temperature detegere possumus quae periculum imminens indicare possint, et ante nocendum prospicere atque agere. In locis velut fabricis aut plantis electricitatis, valde importans est ut apparatus et processus diligenter inspiciantur, ut omnia recte maneant. Camerae thermicae altiorem temperaturam habentes a LSJ Technology iuvare nos possunt ut id ipsum consequamur. Calorem, quem machinae et systemata emittunt, observando, antecedimus ullas difficultates antequam fiant mala — et tempus atque pecuniam salvamus propter hoc. Scire quomodo calor in loco distribuatur valde utile esse potest. Hic locus est ubi thermale altæ temperaturæ magni pretii est, ad dirigendam caloris aut frigoris energiam ad ubi maxime opus est. DE TECHNOLOGIIS LSJ TECHNOLOGIAE LSJ fabricant cameras thermicas FLIR altæ temperaturæ. Si scimus ubi calor concenteretur et ubi dissipetur, sapientiores de temperature controlanda et de conservatione nostrorum facultatum facere possumus. In environmentibus asperis, velut in extremo calore aut frigore, cameras tradicionales non poterunt imagines puras capere. Sed cameras thermicae altæ temperaturæ Technologiae LSJ ad eas conditiones difficiles sustinendas factae sunt. Imagines thermicas ultra altæ resolutionis etiam in conditionibus extremis capere possunt, ut effecte videamus quae fiant et propterea intelligentiores decisiones capiamus. Nos subsidium praebemus administrationibus ignium et salutis, praeter servitia publicae securitatis et urbanae aequipes quaerendi et salvandi. LSJ instrumenta innovativa praebet, ut thermoscopia ad altas temperaturas, opera quaerendi et salvandi, et opera in locis periculosis per varias industrias. Thermoscopia ad incendia: Duas thermoscopiarum species studuimus et evolvimus. Haec tria optiones resolutionis habent: 256×192, 384×288, et 640×512. Haec thermoscopia temperaturas usque ad 2000 gradus Celsius metiri possunt. Instrumenta ad quaerendum et salvandum: Series productorum praebemus, quae monitoria stabilisationis, detectores gasorum, et systemata monitoriae motus includunt. Thermoscopia industrialia: Praeter thermoscopia ad incendia, LSJ thermoscopia manuum ad detegendas percolationes aquae et inspectiones aedificiorum, necnon ad emendationes electronicas, ad investigationem amissae caloris sub pavimentis, et ad inspectionem systematum HVAC praebet. Thermoscopia nocturna: Scopae thermici nocturni visui nocturno optime inserviunt et inter venatores populares sunt. Hae in fucis collocari possunt. LSJ sese obligat instrumenta thermographica altae qualitatis et instrumenta ad salvandum praebere, ut variorum industriarum necessitates explerentur, securitas et efficentia augerentur. LSJ tutissimas et praestantissimas solutiones offert. LSJ fidere potes ut tuus primarius socius in arte urbanae quaerendi et salvandi. Apud LSJ periti sumus in producendis instrumentis optimae qualitatis ad urbana quaerenda et salvanda, quae ad summas normas internationales conficiuntur. Servitium ante venditionem: Adiuvare vos statim ab initio volumus. Consultationes amplas praebemus, ut necessitates vestras plene cognoscamus et solutiones idoneas offeramus. Praeterea demonstrationes productorum una cum exactis specificatiōnibus technicīs praebēmus, ut omnia necessaria ad decisionem informātam capiendam habeātis. Servitium dum venditur: In ipso venditionis processū thermographicam cameram altae temperātūrae et efficācem experientiam sēcūramus. Garantīmus producta vestra tempore et in condiciōne perfectā advenīre, grātiā nostrī automātī systemātis ordinandi et strictī contrōlī qualitātis. Etiam dēlīveriam usque ad ostium (door-to-door) subministrāmus. Servitium post venditionem: Postquam bona vestra acceperitis, societās nostra vobiscum non finitur. Amplum servitium post venditionem includit auxilium pro installatione, instrūctiōnem utentium et cūram. Departamentum nostrum servitii clientium semper parātum est, ut quālibet quaestio aut dubium solvātur, ad plēnam vestram satisfactiōnem assecutam. Postquam instrumenta ā LSJ emeritis, trīennalem garantiam praebēbimus; ex nōbīs specifīca servitia post venditionem obtinēre poteritis. Optiō LSJ est optiō fīdūciae, qualitātis et auxilii inparem. Exspectāmus ut sociī vestri in urbānīs quaerendīs et salvandīs, atque etiam in incendiōrum opprimendō, esse possimus. Nos apud LSJ agnoscimus quam sit necessarium ut clientes nostros praestemus non solum productis eximiae qualitatis, sed etiam servitio egregio. Offrimus garantias pro thermicis cameris ad unam aut altas temperaturas, ut fiduciam nostram in diuturnam durabilitatem ac praestantiam productorum nostrorum ostendamus. Magna nostra inquisitionis et evolutionis investitio certam facit ut producta, quae ad summos normarum gradus conformantur, vobis tradantur. Ut fabrica manufacturaria, a materia prima usque ad ultimam productionem, strictissimis qualitatis regulis obtemperamus. Largam productorum varietatem offerimus, quae omnium utentium necessitates explere possit. Praeterea, copiosam rerum componentium et materiarum primarum supellectilem retinemus, ut prompta cuiuslibet ordinis traditio certificetur. Si vero traditio non tempore conficiatur, nos obligamus ut 2–5 percenta valoris ordinis clientibus nostris restituamus. Ut vos ad efficacem productorum nostrorum usum adiuvemus, plenas instructionales videos praebemus. Etiam classes technicas in loco disponere possumus, quae ad vestras peculiares necessitates aptentur, ut producta nostra confidenter et facile uti possitis. Eligitote LSJ pro productis eximiae qualitatis et fidelitate, atque pro egregio clientium servitio. Ex anno 2013 LSJ instrumenta ad usus rescissionis et investigationis, itemque apparatus ad usus incendiorum reprimendorum, concipit, fabricat et suppeditat. LSJ certificata obtinuit pro thermoscopis ad altas temperaturas, CE et ROHS. Societas etiam plus quam triginta brevem habet. Ut praecipua societas, magnas summas in departmentum suum designandi et investigandi impendimus. Anno 2024 LSJ quattuor magnis eventibus interfuit: INTERSEC, Securika, XVIII Expositione Servitiorum Defensionis et III Expositione Securitatis Nationalis Asiae in Malaysia, necnon NFPA in Civitatibus Foederatis Americae. Praeterea, ad INTERSEC Dubayae, diebus XIV–XVI Ianuarii 2025, adesse iam inscripsimus. In hoc eventu, detector vitam per radium nostrum, radium tridimensionalem qui per parietes videre potest, detectores gasorum, dispositiva auditus et visus, itemque instrumenta ad stabilitatem observandam et thermoscopia ad incendia opprimenda ostendemus. Vos ad stationem nostram venire invitemus. Ex undecim annis experientiae in fabrica, LSJ in novis productis ex desideriis clientium reformandis et producendis specializatur, functiones semper augens et pretia minuens. LSJ etiam longam experientiam in operationibus rescissionis et investigationis in urbibus habet. Anno 2023, in terremoto Turciae, detector vitam per radium LSJ in operibus rescissionis a ‘Chinese Blue Sky Rescue Team’ factis valde utilis fuit. Elige LSJ pro solutionibus technice sublimioribus, quae ad tuas peculiares necessitates aptatae sunt. Copyright © Beijing LSJ Technology Development Co., Ltd. Omnia Jura Servata
-
Politia Privati
caméra thermica altæ temperaturæ
Augete securitatem cum exactis temperaturae mensurationibus e caméra thermica altæ temperaturæ

Monitorete apparatus et processus critici cum caméra thermica altæ temperaturæ

Habete perspectiva pretiosa in distributionem caloris cum caméra thermica altæ temperaturæ

Capite imagines thermicas minutissimas in conditionibus extremis cum caméra thermica altæ temperaturæ
Why choose LSJ Technology caméra thermica altæ temperaturæ?
Supplēs Catēnās Ōmnibus Instrumentīs ad Servandōs et Recuperandōs in Urbānā Rēgīōne
Cur LSJ Potest Esse Tuus Fabricator et Suppeditator Primatorum?
Qualitatem et Punctualitatem Consecutionis Tutamen: LSJ's Devotio ad Placitum Clientium
Innovando Fabricam Tectumentorum Prope Quaestionem Et Salutem Cum Alta Efficiencia
Categories Producti Relatae
Non invenis quod quaeris?
Petere Citatio Nunc
Consulere nostros pro magis productis disponibilibus.Cum Nobis Contacata