Na Laban sa Puncture...">
,需要通过父级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);
}
});
})();
Matibay at Matatag XH-7 Patong Na Pegangang Kamay Tambalan Ng Aluminio Para Sa Simbahan Mga Lalagyan na Hindi Napupunasan Para Ibenta, Malaking Pagbili Kailangan mo ng mga lalagyan na matitiwalaan mo kapag nagpapadala o nag-iimbak ng mga bagay. May malawak na seleksyon ang XIEHE MEDICALcom ng mga lalagyan na hindi napupunctura upang makabili ng mga ito nang buong-bukod. Ang mga ito ay gawa sa bahay na may kalidad at ginawa nang walang pagpapaikli, upang masiguro ang magandang padding at matibay na proteksyon para sa iyong mga produkto. Hindi man mahalaga kung nasa larangan ka ng pagkain o medisina, o kung naghahanap ka man ng maliit, komersyal, o industrial na plastik na lalagyan, totoo ang paniniwala na Tamang Produkto para sa Bawat Trabaho para sa lahat ng iyong mga pangangailangan sa pagpapacking. Maaasahan at maginhawa – mahigpit man ang aming mga lalagyan na hindi napuputok, sila ay nababaluktot din. Iba't ibang sukat at hugis ang available depende sa iyong inaalok. Mula sa likido hanggang sa solid at semi-solid na produkto, mayroon kaming tamang sukat para sa iyong mga produkto. Ang mga nakakaraming gamit na lalagyan na ito ay perpekto para sa iba't ibang aplikasyon, mula sa pharmaceuticals hanggang sa kosmetiko at imbakan ng maliit na bahagi. Mahusay na nakakapit ang aming mga lalagyan sa iyong mga produkto nang buo, sa bahay man o habang ikaw ay nasa biyahe, nang walang takot sa mantsa, pagtagas ng likido, o pagsipsip ng tubig. Ang pangunahing alalahanin sa anumang uri ng pagpapacking ay ang seguridad at proteksyon ng produkto. Sa sharps container ng XIEHE MEDICAL, masisiguro mong ligtas lagi ang iyong mga produkto! Hindi rin nagtatagas ang aming mga lalagyan, upang tiyakin na hindi malalasing ang iyong mga produkto. Ang dagdag na seguridad na ito ay nagbibigay ng kapayapaan ng isip na ligtas ang iyong mga produkto habang isinasakay o iniimbak. Nakukuha namin ang negosyo ayon sa pera sa XIEHE MEDICAL. Kaya ang aming mga lalagyan na hindi napupunasan ay hindi lamang maginhawa, kundi pati na rin nakakatulong sa kalikasan. Ang aming mga lalagyan ay hindi lamang walang BPA, phthalates, HIPS at PVC, kundi gawa rin ito sa mga materyales na maaaring i-recycle at nakakatulong upang bawasan ang dami ng basura sa mga tapunan ng basura pati na rin ang inyong carbon footprint. Kapag pinili ninyo ang aming mga lalagyan ng gas, masisiguro ninyong makakakuha kayo ng mahusay na halaga para sa inyong pera, habang tumutulong kayo sa paggawa ng inyong bahagi sa pangangalaga sa kalikasan. Piliin ang XIEHE MEDICAL para sa murang pakete na nagtataglay ng pagiging kaibigang-kapaligiran. Iba-iba ang pangangailangan sa pagpapacking para sa bawat negosyo. Kaya naman ang XIEHE MEDICAL ay nagbibigay ng mga nakakatakdang at nababagay na lalagyan na hindi napupunasan para sa malaking pagbili. Mula sa mga lalagyan na may tiyak na sukat, kulay, o katangian, bubuuin namin ang aming mga lalagyan ayon sa inyong pangangailangan. Ang aming mga bote ay maaaring gamitin sa iba't ibang paraan tulad ng para sa mga pulbos, tablet, likido, at gel. At kung ikaw ay XIEHE MEDICAL, maaari kang magpadala ng malaking order para sa mga pasadyang lalagyan na magdudulot ng ginhawa sa iyong negosyo. Ang Hehe Medical Equipment ay nagbibigay-diin sa kasiyahan ng mga customer at nagsisikap na tugunan ang mga kailangan ng aming mga customer nang may mataas na antas ng kahusayan at pagkakatiwala. Ang aming koponan ng dedikadong mga empleyado at ang aming teknolohiya sa lalagyan na laban sa puncture ay nagbibigay-daan sa amin na magbigay ng serbisyo na may pinakamataas na kalidad at personalisado sa mga kliyente, na ginagarantiya na ang kanilang mga pangangailangan ay lubos na tinutugunan. Ang aming layunin ay itatag ang isang patuloy, matatag, at kapwa-benefisyoso na ugnayan sa mga kliyente, at ibigay sa kanila ang mga produkto at serbisyo na may mataas na kalidad. Bilang propesyonal na tagagawa ng kagamitang medikal, ang Xiehe Medical Apparatus Instruments ay nagbibigay ng de-kalidad na produkto at espesyalisadong serbisyo. Mahigpit na sumusunod sa sistema ng kontrol sa kalidad na ISO13485, ang lahat ng mga produkto ay sertipikado ng TUV, CE, FDA at iba pa. Kasama ang isang masigasig na koponan na kayang tumugon sa mga pangangailangan ng mga customer nang maayos at tiyakin na ang mga produkto ay ligtas na lalagyan na hindi napupunas at mga serbisyo. Kung ito man ay stretcher para sa ambulansya, polding stretcher, muwebles sa ospital o mga produktong pang-libing, ang Xiehe Medical Equipment ay kayang magbigay sa mga customer ng mga nakatutuwang solusyon. Ang Xiehe Medical Apparatus Instruments ay may matatag na dedikasyon sa inobasyon at pananaliksik at pag-unlad (R&D), pati na rin sa paggawa ng mga produkto na may kompetitibong mga punto ng benta. Kami ang mapagmataas na may-ari ng hanay ng mga patent at karapatan sa ari-arian na intelektuwal, kabilang ang mga lalagyan na hindi mabubutas, stretcher, mga gamit sa unang tulong, kasama ang mga kagamitan sa ospital, at mga produkto para sa libing. Ang mga produkto ay nililikha upang tugunan ang mga pangangailangan ng mga customer at manatiling updated sa pinakabagong uso. Ang mga produktong ito ay mainam na tinanggap ng mga customer sa loob at labas ng bansa. Ang Xiehe Medical Apparatus Instruments ay nagpapalawak ng pambansang pamilihan at benta ng mga lalagyan na hindi mabubutas patungo sa globalisasyon. Sa loob ng nakalipas na 10 taon ng pagsisikap at suporta ng mga kasosyo, mayroon na tayong higit sa 30 mga distributor sa buong mundo. Ang mga produkto ay magagamit sa higit sa 120 bansa. Nakatuon kami sa paglikha ng mga pangmatagalang pakikipagtulungan kasama ang mga integrator at mga distributor, upang magtayo at itaguyod ang hinaharap kasama nila.Container na resistente sa pukot
Nakatutuwang, Madaling Gamiting Pag-iimpake para sa Maraming Industriya

Mga Lalagyan na Hindi Nakakalusot upang I-lock ang Sariwa at Alisin ang Hangin

Murang at Ekolojikal na Paraan upang I-impake ang Iyong Negosyo

Mga Lalagyan na Maaring I-customize at Multifunctional para sa Inyong Malalaking Order
Why choose XIEHE MEDICAL
Container na resistente sa pukot?
Nakatuon sa Mga Kliyente na Bilis na serbisyo pagkatapos ng benta at suporta sa teknikal
Mataas na kalidad ng mga produkto at espesyal na mga serbisyo
Mapanuring R at D at Produkong Benta ng Points
Global na network ng marketing at matatag na mga partner
Mga kaugnay na kategorya ng produkto
Hindi makahanap ng hinahanap?
Humiling ng Quote Ngayon
Makipag-ugnay sa aming mga konsultant para sa iba pang mga produkto.Makipag-ugnayan