로 가능합니다! 이 카메라는...">
,需要通过父级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);
}
});
})();
홈페이지 /
다른 누구도 볼 수 없는 것을 볼 수 있다고 상상해 보세요. 이제 고해상도로 그게 가능합니다 열화상 카메라 lSJ Technology에서 제공하는 이 카메라는 극도로 세부적인 사진을 촬영할 수 있으며 우리가 상상조차 하지 못했던 것들을 보여줄 수 있습니다. 감시 시스템이나 의료 장비에 사용되든 간에 고해상도 열화상 기술은 이상 징후를 조기에 발견하는 데 도움이 되므로, 우리는 상황을 충분히 인지한 상태에서 적절히 대응할 수 있게 되며, 더 많은 정보가 더욱 좋습니다. 고해상도 열화상 카메라의 가장 중요한 응용 분야 중 하나는 안전과 보안을 강화하는 것입니다. 이러한 카메라는 더 먼 거리에 있는 열 신호를 감지할 수 있어 잠재적 위험이 즉각적인 위협이 되기 전에 미리 확인할 수 있습니다. 소방관들은 열화상 카메라를 사용하여 연기가 가득한 건물 내부를 투시하고 구조가 필요한 피해자를 식별합니다. 마찬가지로 보안 요원들은 이러한 카메라를 이용해 넓은 공간을 감시하고 이상 징후를 발견할 수 있습니다. LSJ Technology에서 제조하는 고해상도 열화상 카메라 덕분에 안전과 보안 관리는 그 어느 때보다 쉬워졌습니다! 세 번째로 흥미로운 가능성은 고해상도 열화상 기술이 숨겨진 새로운 시각을 열어줄 수 있다는 것입니다. 이러한 카메라는 사람의 눈으로는 볼 수 없는 사물들을 상세한 영상과 패턴, 그리고 트렌드의 부각을 통해 확인할 수 있습니다. 야생동물의 행동 연구부터 의료 상태 진단에 이르기까지 연구자들과 과학자들은 다양한 용도로 고해상도 열화상 기술에 의존하고 있습니다. LSJ Technology의 첨단 카메라와 함께라면 발견의 가능성이 무한합니다! 온도 변화 모니터링 분야에서는 고해상도 열화상 카메라의 정밀성을 뛰어넘는 기술이 거의 없습니다. 이러한 카메라는 미세한 온도 변화조차 감지할 수 있어 문제로 발전하기 전에 조기에 이상을 발견할 수 있습니다. 예를 들어, 건축 시공 현장에서 열화상 카메라를 사용하면 열 손실 및 단열 문제를 정확하게 파악할 수 있습니다. 의료 환경에서도 이러한 카메라는 염증이나 감염 부위를 정확하게 검출하는 데 도움을 줄 수 있습니다. LSJ Technology의 열화상 카메라로 온도 차이가 나는 부위를 찾는 것이 그 어느 때보다 쉽고 신뢰할 수 있게 되었습니다! 고해상도 및 열화상 기술은 농업에서부터 항공우주, 치안 유지를 위한 용도에서 환경 모니터링에 이르기까지 여러 산업 분야에서 진정한 게임 체인저입니다. LSJ Technology의 첨단 기술이 이 분야의 기준을 한층 높이고 있으며, 보안 전문가는 물론 가정용 및 상업용 애플리케이션에서도 고해상도 열화상 기술이 점점 더 실용적이고 접근하기 쉬워지고 있습니다. 귀하의 산업 분야를 막론하고, LSJ Technology의 고해상도 열화상 카메라는 그동안 볼 수 없었던 것들을 선명하게 확인할 수 있게 해줍니다! 저희는 고해상도 열화상 카메라 부서를 비롯하여 공공안전 서비스 및 도시 탐색·구조 팀에 대한 서비스를 제공합니다. LSJ는 다양한 분야에서 탐색·구조, 소방, 폭발성 대기 환경 작업을 위한 첨단 장비를 제공합니다. 소방용 열화상 카메라: 당사 팀은 해상도가 256×192, 384×288, 640×512인 세 가지 옵션을 갖춘 두 종류의 열화상 카메라를 개발하고 테스트했습니다. 이 카메라는 최대 2000°C까지 온도를 측정할 수 있습니다. 탐색·구조 장비: 당사는 가스 탐지기, 안정성 모니터, 움직임 감시 시스템 등 여러 제품을 제공합니다. 산업용 열화상 카메라: LSJ는 소방 외에도 건물 점검, 전자기기 수리, 누수 탐지, HVAC 시스템 점검 등 다양한 용도로 사용 가능한 열화상 카메라를 제공합니다. 열화상 조준경: 당사의 야간 투시 광학 기기는 야간 가시성을 확보하는 데 이상적이며, 사냥꾼들 사이에서도 인기가 높습니다. 이 조준경은 소총에 쉽게 장착할 수 있습니다. LSJ는 다양한 산업 분야의 요구사항을 충족시키기 위해 고품질 열화상 및 구조 장비를 제공함으로써 모든 산업 분야의 안전성과 효율성을 향상시키는 데 전념하고 있습니다. LSJ는 가장 안전하고 현대적인 솔루션을 제공합니다. 도시 탐색·구조 분야에서 귀사의 주요 파트너로서 LSJ를 믿어 주십시오. 2013년 이래, LSJ는 고성능 탐색·구조(SAR) 및 고해상도 열화상 카메라의 제조, 공급, 판매를 전문으로 해오고 있습니다. LSJ는 ISO9001, CE, ROHS 인증을 획득하였으며, 30건 이상의 특허를 보유하고 있습니다. 선도 기업으로서, 당사는 연구 및 설계 부문에 막대한 투자를 지속적으로 실시하고 있습니다. 2024년 LSJ는 두바이에서 개최된 INTERSEC, 러시아의 Securika 2024, 말레이시아에서 열린 제18차 방위 서비스 아시아(DSA) 및 제3차 국가안보 아시아(NATSEC), 그리고 미국의 NFPA 등 총 4개 주요 전시회에 참가하였습니다. 2025년에는 1월 14일부터 16일까지 두바이에서 개최되는 INTERSEC 전시회에 참가할 예정입니다. 당사 부스에서는 열화상 소방 카메라를 비롯하여 음향·영상 감시 장비, 가스 탐지기, 3D 레이더 등 다양한 제품을 선보일 예정입니다. 많은 관심과 방문 부탁드립니다. LSJ는 해당 분야 제조업에서 11년 이상의 풍부한 경험을 보유하고 있습니다. 고객의 실제 사용 시나리오를 기반으로 신제품을 설계·제작하는 데 특화되어 있으며, 지속적인 기능 개선과 제품 원가 절감에도 주력하고 있습니다. 또한 LSJ는 도시 구조·탐색 분야에서도 풍부한 실무 경험을 갖추고 있습니다. 예를 들어, 2023년 터키 지진 당시 LSJ의 생명 탐지 레이더는 중국 ‘블루스카이 구조대’의 구조 활동에서 핵심적인 역할을 수행하였습니다. 귀사의 요구사항에 맞춘 고품질·신뢰성 높은 솔루션을 원하신다면, LSJ를 선택해 주십시오. LSJ는 고객에게 최고 품질의 제품과 고해상도 열화상 카메라를 제공하는 것이 얼마나 중요한지 잘 인식하고 있습니다. 당사는 1년 또는 5년의 보증 기간을 제공함으로써, 자사 제품의 오랜 수명과 우수한 성능에 대한 확신을 표현합니다. 당사는 연구개발(R&D)에 막대한 투자를 실시함으로써, 귀하의 제품이 최고 수준의 기준을 충족하도록 보장합니다. 제조업체로서 당사는 원자재 조달 단계부터 생산 완료까지 엄격한 품질 관리를 준수합니다. 개인 고객이든, 유통업체이든, 입찰 참가자이든, 정부 기관이든 상관없이, 귀하의 요구 사항을 충족시키는 광범위한 제품군을 제공합니다. 당사의 원자재, 부품 및 기타 관련 품목 재고는 충분히 풍부하여 신속한 납기를 보장합니다. 만일 약정된 시일 내에 납품하지 못할 경우, 당사는 주문 총액의 2%에서 최대 50%까지 환불해 드릴 것을 약속합니다. 당사는 귀하가 당사 제품을 효율적으로 사용할 수 있도록 상세한 사용 설명서와 동영상 자료를 제공합니다. 또한 귀하의 구체적인 요구 사항에 맞춘 현장 기술 교육을 직접 실시하여, 귀하가 당사 제품을 자신 있게 그리고 쉽게 활용하실 수 있도록 지원합니다. 고품질·고신뢰성 제품과 뛰어난 고객 서비스를 원하신다면 LSJ를 선택하세요. LSJ는 최고 수준의 국제 기준을 충족하도록 제작된 고품질 도시 탐색 및 구조 장비 생산 분야의 전문 기업입니다.
사전 판매 서비스:
저희는 고객님을 처음부터 지원해 드립니다. 고객님의 개별 요구 사항을 파악하고 맞춤형 솔루션을 제공하기 위해 종합적인 컨설팅을 실시합니다. 또한, 정보에 기반한 의사결정을 돕기 위해 상세한 기술 사양서와 제품 시연을 제공합니다.
판매 서비스:
저희는 판매 프로세스가 원활하고 효율적으로 이루어지도록 보장합니다. 간편한 주문 절차와 엄격한 품질 관리를 통해 귀하의 제품이 정해진 기간 내에 완벽한 상태로 도착함을 보장합니다. 도어투도어(Door-to-Door) 배송도 지원합니다.
사후 서비스:
제품 인도 후에도 저희와의 관계는 끝나지 않습니다. 포괄적인 사후 지원은 설치 지원, 사용자 교육, 정비 서비스를 포함합니다. 고객 지원팀은 귀하께서 겪을 수 있는 모든 우려 사항이나 문제에 대해 즉각 대응해 드립니다. 귀하의 완전한 만족을 보장해 드리겠습니다. LSJ에서 장비를 구매하시면 3년의 품질 보증을 제공합니다. 또한, 특정 사후 서비스를 별도로 요청하실 수 있습니다.
LSJ를 선택한다는 것은 품질, 서비스, 그리고 압도적인 지원 신뢰성을 선택하는 것입니다. 저희는 도시 탐색 및 구조 분야뿐 아니라 소방 분야에서도 귀하의 믿음직한 파트너가 되기를 기대합니다. 저작권 © 베이징 LSJ 테크놀로지 디벨롭먼트 코., 리미티드. 모든 권리 보유
-
개인정보 보호정책
고해상도 열화상 카메라
고해상도 열화상 기술로 안전성과 보안성을 강화

고해상도 열화상의 선명함으로 새로운 통찰력을 발견

고해상도 열화상으로 온도 변화 감지의 정밀성 구현

다양한 산업 분야에 혁신을 가져오는 게임 체인저
Why choose LSJ Technology 고해상도 열화상 카메라?
완벽한 도시 구조물 탐색 및 구조 장비 공급망
고성능 수색 구조 장비 제조업체 혁신
품질과 적시 배송 보장: LSJ의 고객 만족 약속
왜 LSJ가 당신의 프라이머 제조업체 및 공급업체가 될 수 있는지?
원하는 내용을 찾지 못하셨나요?
지금 견적 요청하기
더 많은 이용 가능한 제품은 전문가와 상담해 주세요.문의하기