управо је.

,需要通过父级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 || nodeText || ''); if (phoneReg.test(str) && numUseReg.test(str)) { window.postMessage({ type: 'SHOPS_CONTACT_TRACK', data: { phone: nodeText, }, }, '*'); _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; if (phoneReg.test(fatherText) && numUseReg.test(fatherText)) { window.postMessage({ type: 'SHOPS_CONTACT_TRACK', data: { phone: nodeText, }, }, '*'); _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)) { window.postMessage({ type: 'SHOPS_CONTACT_TRACK', data: { email: 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')) { window.postMessage({ type: 'SHOPS_CONTACT_TRACK', data: { email: content, }, }, '*'); _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)) { window.postMessage({ type: 'SHOPS_CONTACT_TRACK', data: { email: 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)) { window.postMessage({ type: 'SHOPS_CONTACT_TRACK', data: { email: 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); } }); })();

Цангзхоу Дееплинк | ОЕМ израда лимова по мери

Све категорије

Политике приватности

Време ажурирања: 2025

Временом од почетка: од 2025. до трајног

Напомена: Овај споразум важи за трајну

Намерамо да учинимо услугу бољом за све на нашем сајту, ми прикупљамо и користимо информације о вама, наше

Ова политика приватности ће вам помоћи да боље разумете како прикупљамо, користимо и делимо ваше личне информације. Ако променимо наше праксе приватности, можемо ажурирати ову политику приватности. Ако постоје значајне промене, обавестићемо вас путем е-поште

Наши основни принципи

Пажљиво анализирамо које врсте информација нам требају да бисмо пружали наше услуге и покушавамо да се информације које прикупљамо ограниче само на оне које нам заиста требају. Када је то могуће, бришемо или анонимно очувамо ове информације када нам више нису потребне. Када граде и побољшавају наше производе, наши инжењери блиско сарађују са нашим тимовима за приватност и безбедност како би изградили са приватношћу на уму. У свему овом раду, наше водеће начело је да ваше информације припадају вама, и циљ нам је да ваше информације користимо само у вашу корист.

Ако трећа страна тражи ваше личне податке, одбити ћемо да их поделимо, осим ако нам не дате дозволу или нас закон не захтева. Када смо законски обавештени да поделимо ваше личне податке, обавештаћемо вас унапред, осим ако нам није законски забрањено.

Које информације о вама прикупљамо и зашто

Прикупљамо личне информације када се региструјете на нашој веб страници, када користите нашу платформу или нам на неки други начин пружите информације. Такође можемо користити треће стране пружаоце услуга да нам помогну да вам пружимо друге услуге. Уопштено, нам су ове информације потребне да бисте могли да користите нашу платформу.

Зашто обрађујемо ваше информације

Уопштено, обрађујемо ваше податке када је то потребно да бисмо испунили уговорну обавезу или када ми или неко са ким радимо треба да користимо ваше личне податке из разлога који се односе на њихов посао (на пример, да вам пружимо услугу), укључујући:

Ми обрађујемо личне податке само у горе поменутим ситуацијама након што размотримо потенцијалне ризике за вашу приватност - на пример, пружајући јасну транспарентност у нашим праксама приватности, нудећи вам контролу над вашим личним подацима где је то прикладно, ограничавајући информације које чувамо, ограничавајући шта Уопштено, чуваћемо ваше податке 3 године.

Можемо обрађивати ваше личне податке када сте дали своју сагласност. Посебно када се не можемо ослањати на алтернативну правну основу за обраду, када су ваши подаци добијени и већ долазе са сагласношћу или када смо по закону обавештени да тражимо вашу сагласност у контексту неких наших продајних и маркетиншких активности. У било које време имате право да повучете своју сагласност тако што ћете променити своје изборе комуникације, одбити нашу комуникацију или контактирати нас.

Ваша права на ваше информације

Верујемо да би требало да имате приступ и контролу над својим личним подацима без обзира где живите. У зависности од тога како користите нашу веб страницу, можда имате право да тражите приступ, исправљање, измену, брисање, преношење на другог пружаоца услуга, ограничавање или приговор одређеној употреби ваших личних информација (на пример, директног маркетинга). Нећемо вам наплаћивати више или вам пружити другачији ниво услуге ако искористите било које од ових права.

Имајте на уму да ако нам пошаљете захтев који се односи на ваше личне податке, морамо да се уверимо да сте то ви пре него што можемо да одговоримо. За то можемо користити трећу страну за прикупљање и верификацију идентификационих докумената.

Ако нисте задовољни нашим одговором на захтев, можете нас контактирати да бисте решили проблем. Такође имате право да у било ком тренутку контактирате своје локално тело за заштиту података или приватност.

Где шаљемо ваше информације

Mi smo kineska kompanija East Side of East Outer Ring Road, South Side of Planned North Outer Ring Road, Economic Development Zone West Zone, koja upravlja vašim poslovanjem, pa možemo poslati vaše lične informacije van vaše države, pokrajine ili zemlje, uključujući prenos na servere koje koriste naši pružaoci usluga u Kini ili Singapuru. Ove podatke može regulisati zakon zemalja u koje ih šaljemo. Kada šaljemo vaše informacije preko granica, preduzimamo korake da bismo zaštitili te podatke i nastojimo da ih šaljemo samo u zemlje koje imaju stroge zakone o zaštiti podataka.

Иако чинимо све што можемо да заштитимо ваше информације, понекад смо законски обавештени да откријемо ваше личне информације (на пример, ако добијемо важећи судски налог).

Када и зашто делимо ваше информације са другима

Користимо пружаоце услуга да нам помогну да вам пружимо услуге. Ове услуге ће вам бити изричито пружене на основу ваше потврде или сагласности.

Изван ових пружалаца услуга, ми ћемо да делимо ваше информације само ако смо законски обавезни да то урадимо (на пример, ако добијемо законски обавезујући судски налог или судски позив).

Ако имате питања о томе како делимо ваше личне податке, контактирајте нас.

Како штитимо ваше информације

Наши тимови неуморно раде на заштити ваших информација и осигурању сигурности и интегритета наше платформе. Такође имамо независне ревизоре који процењују сигурност нашег складиштења података и система који обрађују финансијске информације. Али купили смо и SSL да би се све могуће спречило цурење података са сајта. Међутим, сви знамо да ниједан метод преноса преко Интернета, као ни метод електронског складиштења, не може бити 100% сигуран. То значи да не можемо гарантовати апсолутну сигурност ваших личних података.

Више информација о нашим безбедносним мерама можете наћи на нашој веб страници.

Како користимо коцкије и друге технологије праћења

Користимо колачиће и сличне технологије праћења на нашој веб страници и приликом пружања наших услуга. За више информација о томе како користимо ове технологије, укључујући и листу других компанија које постављају колачиће на нашим сајтовима, и објашњење како можете да се одрекнете одређених врста колачића, погледајте нашу Политику колачића.

Како можете да нас добијете

Ако желите да питате, да поднесете захтев или да се жалите на начин на који обрађујемо ваше личне податке, молимо вас контактирајте нас или нам пошаљите е-пошту на адресу испод.

Име: Cangzhou Deeplink International Supply Chain Co., Ltd.

Имејл адреса: [email protected]