sem hjálpa til við að verja okkur gegn hlutum sem geta sprungið. Tækni í...">
,需要通过父级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);
}
});
})();
Þekkingaraðgerðir eru náttúruþekja fyrir skeyti sem hjálpa okkur að verja okkur fyrir því sem getur búið til rás. Tækni er fræðin sem gerir nokkrar af bestu tímaþekkingaraðferðum. Fyrirtækið notar þermal imaging kamera fyrir android þannig að sprengjafræðaþekkur þeirra séu óerfið háæfugir.Þessi vélir geta greint mikið af slembivið varanum frá líkrar til pulvers mjög hratt og nákvæmlega. Að geta nötturóp fyrir geitir vitrast við tryggingu stöðva eins og flugvöllur, rógastaðir, og aðrar opinberar staðsetningar. Þær skoða gæslur fólks og eignir, og hjálpa til að forðast illt. Sprengjubombu greinir þjóna eins og hetjur sem vernda okkur óséðar. Þakkað náttúruþekjur fyrir skeyti þessum vélum geta öryggisliðir fljótt reiðst á hættu og eyða henni áður en hún verður stór vandamál. Þetta er vegna þess að notkun sprengjafræðaþekkingaraðila hefur mikið bætt við tryggingarkerfi um heim. Vi í LSJ þekkjum hvernig mikilvægt er að borga viðskiptavinunum okkar með gæðuvara og fremur aðalþjónustu. Við bjóðum á tryggingar fyrir einn eða flóknara vopnagreiðsluarkerfi til að sýna öryggin okkar á langvarandi styrkina og framkvæmd kynna vorra vöru. Stórt rannsóknar- og þróunarlegursins okkar varstökur að þú færð vöru sem uppfyllir hæsta staðlar. Sem framleiðslufyrirtæki, haldað við strengt gæðastjórnun frá råvörum upp í endaleiðréttingu. Við bjóðum á breitt vöruval sem getur uppfyllt þarfir allra notenda. Við halda líka vel í vefstofu af hlutum og råvörum til að vísa á hratt framreigningu hverrar pörunnar. Ef við látum ekki klára framreigninguna á tíma, lofum við að skila 2-5 prósent gildis pörunnar til viðskiptavinanna okkar. Til að hjálpa þér að nota vöru okkar á best mögulega hátt, bjóðum við á fullnægjanleg dæmi myndskeið. Við getum líka rafrætt staðbundin tækni kennslur, stilltar eftir sérstökum þarfnendum þínum, til að varstöku að þú sért fullkominn að nota vöru okkar með tryggð og auðvelt. Veljaðu LSJ fyrir hækkaða gæða, fullytranda vöru og fremur aðalþjónustu. Vi í LSJ erum fyrirlestrar á að búa til fremsta gæði bandaríkjafjármál og rannsóknarréttindi sem hafa verið útbúin til að uppfylla hæsta alþjóðlega stöðluðu skilyrði.Þjónustu á undan selju: Við erum með þér frá upphafi. Við bjóðum upp á fullnægri råðgjöf þannig að við getum fullkomið þínar þarfir og birt lösungar. Við bjóðum líka upp á sýningu vöru samanlagður við nákvæmar tækni-upplýsingar svo að þú mættir hafa allar nauðsynjar upplýsingar fyrir að taka vísenda ályktun.Þjónustu við selju: Á meðal seljuferlið, við tryggjum öryggis-athugunaraðila og afgerðar eftirfarandi upplifun. Við tryggjum að vörunar koma tímanlegt og í fullkomnu standa, þakkar til að voru sjálfvirkri pöntunarkerfi og strengri gæðaskoðun. Við styðjum einnig dularáðstefnu afhendingu.Eftir-seljaþjónusta: Eftir því að þú hefur mótið vörunum þínar, mun samstarfið okkar með þér ekki enda. Voru víða eftir-seljaþjónusta innifeldi stuðning fyrir uppsetningu, notanda þjáningu og viðhald. Voru þjónustudeild er alltaf tiltæk til að leysa hvaða spurningar eða athugasemdir sem þú gætir, til að tryggja fullkomna nógægðina. Þegar þú kaupar tengiliðafræði frá LSJ, munum við bera yfir þrjá ára tryggja, þú getur fengið sérstaka eftir-seljaþjónustu frá okkur.Valið LSJ er að velja traust, gæði og ólíkana stutt. Við vaðum um að verða samstarfsaðilar þínir í bandaríkjafjármála og líffjármála. Frá 2013 hefur LSJ verið að þróa, framleiða og sækja hæfilegar leitar- og frelsis- og brandmannavél. LSJ hefur fengið skilaboð fyrir ISO9001, CE og vísenda upplýsingar um sprengjuuppspörun. Auk þess eignast þau yfir 30 breviféramörgum. Sem framskiptur starfsmaður getum við sett mikla fjármál inn í hönnun og rannsóknarstofu okkar. LSJ var hluti af fjögurum stórum atburðum árið 2024: INTERSEC, Securika, 18. forsvarshandurslýsing Ásiu og 3. þjóðlegt öryggisforsamming Ásiu í Malajía og NFPA í Bandaríkinum. Við erum einnig skráðir fyrir INTERSEC í Dubái frá 14.-16. janúar 2025. Við munum sýna upp radar lífsspyrari, 3D-radar sem er hægt að sjá með vegum, gásuppspárara, hljóð- og myndslysinir vél og jafnframt stabilitetsuppspárara og hitaveita til að berjast við eldur. Við bjóðum þér að komast á bíðslustendina okkar. LSJ hefur yfir 11 ára kennslu í framleiddum vörum. Þeir sérstilla sig við að hönnuna og byggingu nýsköpuðra vöru sem byggja á notenda notkunarsviði. Þeir halda líka áfram að bæta eiginleikum og lækkja kostnaði vöru. LSJ hefur einnig útbreiðslukenndir innan borgarleitar- og frelsisvirkni. Til dæmis, við jörðskjálftinn árið 2023 í Tyrklandi var radio lífsspyrari LSJ grunnvöru í frelsisástarfum blá himins frelsislagarástsins Kínus. Veljið LSJ fyrir fremsta, treystileg lausn sem er skapuð til að passa við þarfir þínar. Við bjóðum aðstoð Fire og Rescue stofnunum, sem við þjálfaðum líka aðalþjónustuviðskipti og borgarleitarsérhæfingarliðum. LSJ býður upp á nýsköpunaraðgerðir fyrir krefjarafræði tækifærum, leita og rétt leið og vinna í hæfilegar svæði yfir mörgum efnahaganeyserni.Rannsóknarhitaskoðar: Við höfum rannsakað og útbúið tvær tegundir hitaskoða. Þeim er með þrjár upplausnarrökunarvalkostana: 256x192 384x288 og 640x512. Þessar skoðanir geta mælit hiti upp á 2000 gráður Celsius.Leit og rétt tæki: Við bjóðum upp á breiðslíkan af vöru sem inniheldur stöðugri skjár, gásuppspurning og færsluuppsprettunarverkefni.Íþrókin hituskautakamerur: Að lokum hituskautakamerum fyrir eldslysing, bjóður LSJ handhafin hituskautakamerur til að uppspretta leckur í vatn og húsbótarprófum, eins og viðskipti við elektroníuskoðun, undirstofuheiti tap og HVAC athuga á HVAC kerfi.Hituskautakamerur og nóttvísanarskautakamerur eru vel færðir fyrir nóttvísun á nóttina og eru algengir hjá veiðimenn. Þau geta sett á gevar.Hitt við LSJ er að bjóða upp á hágæðu hituskauta- og rétt tæki til að svara þörfum mörgra efnahaga, meira tryggingu og hagstefnu. LSJ býður upp á mestu tryggju og fremsta lausnum. Getur traust LSJ til að vera alls hluta þinn í vélbundi leitar- og rétt. Höfundarréttur © Beijing LSJ Technology Development Co., Ltd. Allur réttarvera varðveittur
-
Friðhelgisstefna
Upplausnadeildara
Það teknólega sem liggur aftur því að uppgera upplausnadeildara
Aukun á tryggingu með upplausnadeildara
Hvernig upplausnadeildarar hjálpa okkur að vera tryggir
Að rannsaka áhrifin á tryggingarkerfi af upplausnadeildara
Why choose LSJ Technology Upplausnadeildara?
Að tryggja gæði og tímað skila: LSJ's ábyrgð á viðskiptavinamargfræði
Hvers vegna getur LSJ verið framleitara og leiðsögumaður þinn?
Þróunargerður á hæfilegum leitar- og frelsisfyrirbærum
Þarnaðarkeðjan fyrir allt aðganganlegt gervi í borgarsækjum og fríboðskeðjanir
Skyldar vöruflokkar
Finndu ekki það sem þú leitar að?
Biðja um tilboð núna
Hafðu samband við ráðgjafana okkar fyrir fleiri tiltækar vörur.Taktu samband