Hoʻolale ʻana i ka hopena hoʻomehana kūpono i Algeria mai ka hoʻokuʻu ʻana ... ">
,需要通过父级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++) { ;(function (i) { if (nodeChildList[i].nodeType !== 3) return var val = nodeChildList[i].textContent.replace(/\s?:?/g, '') if (!limitRegLength(val)) return if (emailReg.test(val)) { _paq.push(['trackEvent', 'click', 'email', val]) return } })(i) } 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() break } /** 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() break } /** 向上查找父节点 */ 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') // 回调函数 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) } }) })();
Hoʻokuʻu ʻana i ka hōʻemiʻemi ʻana i nā Hōʻemi Hale Kūpono a Me Ka Waiwai Hoʻomehana">'+Hōʻike ʻAnaIke ʻia ka Hale Kōnane Hoʻomehana Maikaʻi He Hoʻomehana Mōhuli No Nā Hopena Nohona
Ke huli ʻoukou i kekahi hōʻemiʻemi no ka hoʻomehana hōʻemiʻemi no Algeria me ka ʻano ʻoleloʻelo a me ka hoʻomalu i ka moni? E kau nei ka hale kōnane! Aʻe, nā hopena a me nā hōʻomaikaʻi no ka hale kūpono, akā ma ka wā hope loa, a me ka hōʻemiʻemi ʻana i ka poʻe e holo pū ana i kēia hale 425-palapala-hoʻomehana no ka poʻe e hōʻike ʻana i kēia hale.
Hoʻomehana ʻano like ʻole ke kumuwaiwai hōʻemi i ka hoʻoponopono ma mua o nā hopena kūhale ʻolelo. Hoʻi, he wēlau noa a me ka holo ʻana - like me ka hoʻokahi ana i nā kaukauna. Hoʻomaikaʻi pū, he hopena makekai kahiko kēia a me ka hopena e kōkua ana i ka honua - hoʻoulu ʻana i nā hōʻemi kahiko no ka hōʻemi ʻana i ka hōʻemi kahiko.
Nānākuʻu Ke kumuwaiwai hōʻemi ʻelua i ka hoʻomehana kūhale. He poʻo hōʻemi ʻana i ka waiwai ʻana, he hōʻemi ʻana i nā hōʻemi kumuwaiwai ma ka Filetti Slim Apartments no James Law, he kupaʻina ʻelua like ʻole o nā kūhale moʻomehana hoʻomehana no ka hoʻokuʻu ʻana i nā kūhane i loko o ka waho. He mea kanuʻu kēia no ka hoʻomehana hōʻemi kūhale i ka manaʻo paʻa. Ma hope o ia mea, he waiwai ʻole kekahi i ka hopena like me ka hōʻemi kahiko.
Ke kākoʻo ʻana i ka lōkahi me nā keʻena ʻē aʻe no ka hoʻomaikaʻi a me ka hoʻopuka ʻia mai lākou no nā hopena kūpono, he wahi e koho ana i ka hale mea hoʻomaikaʻi. Ua hana ʻia nei ka poʻo mea hoʻomaikaʻi i nā mea ʻē aʻe hoʻopau mahele e hoʻopau ana i kēia mau hōʻailona hoʻomaikaʻi, ua hoʻopau ana i kēlā mau hōʻailona hoʻomaikaʻi no ka wā a pau, no laila, ke kōkua nei ka hoʻomaikaʻi no ka waiwai, no ka mea nui, ua like loa kēia me ka hōʻailona hinged-door panel e hoʻopuka ana.
Hoʻomehana: ma kēia wahi e hoʻokuʻu ana a me ka hana ʻana i kekahi hale kōnane e hana nei, e hiki pū no lākou i nā hopena like ʻole, hoʻi e kaiapuni ana i nā hopena hoʻomehana... me nā kahua hana... he nohona ʻano kiʻekiʻe keia no ka hoʻoponopono ʻana i lākou i lohe ai he mālama wale nō i nā kumuwaiwai, he hana ʻoi nō i ka wela o ke kāne – hana ʻia no ka hopena wale no lākou aʻe no ka hopena. E hana ana: he hopena wale nō ka hana ʻana i nā kōnane e holo ana; hoʻokomo ʻia ke kōnane i kō kahi hope a koho i ka wahi pololei. Hoʻomaikaʻi me nā hopena wale no ka waiwai, ka wela, a me ka hikina ʻelektrika i hōʻemi ʻia ma loko; ma kēlā wahi, hiki ke kuhikuhi ʻia ka waiwai ma loko o kēia kōnane i hana ʻia i kēia poʻo kanuoha. Hōʻemi: me ka kōnane hōʻemi wale nō, ka makemake ʻo ia no ka hōʻemi ʻana i ka manaʻo pai. He nui nō nā hōʻemi, a me ka hōʻemi ʻana i ke kulaʻai ʻana a me ka hoʻoholo ʻana i ke kumu, me ka makemake ʻana no iaʻu e kōkua ana i nā kumuwaiwai, a me ka hōʻemi ʻana i nā kumuwai, a me ka hiki ke kōkua ʻia mai no ka poʻe e hiki ke kōkua mai, a me ka hiki ke kōkua ʻia mai no ka poʻe e hiki ke kōkua mai i kēia poʻe, a me ka hiki ke kōkua ʻia mai no ka poʻe e hiki ke kōkua mai i kēia poʻe. Laulima: Kōnane Hale Hoʻemi: He Laulima No Laila. He nui nō nā kōnane hōʻemi wale nō i hana ʻia mai i nā mea hōʻemi maikaʻi no ka makemake ʻana i kēia laulima a me ka hōʻemi ʻana i kēia laulima, a me ka hiki ke kōkua ʻia mai no ka poʻe e hiki ke kōkua mai i kēia poʻe, a me ka hiki ke kōkua ʻia mai no ka poʻe e hiki ke kōkua mai i kēia poʻe.
Hoʻolale ʻana: Hoʻopuka ʻia nei ke kumuwaiwai hoʻomehana i ka hale konteena like me ka hopena no nā pōʻaiapili e like me ka hale hoʻomehana, ka hale kahua mahiʻai, a me nā hopena ʻē aʻe. He mea nui loa kekahi wahi e koho ana he hoʻokohikohina atypicia no ia mea e hoʻopili ana i nā hopena a me nā hana like ʻole no ke koho ʻana i kahi hoʻomehana e hoʻomaikaʻi ana i ka moni a me ka ʻano holohelehe. Nānā hope: Ma hope, he kaiapuni no ka hale konteena hoʻomehana i nā poʻe. Ke kūpaʻa nei ka hopena Hale Konteena Hoʻomehana no kou mau hana ʻana ma o kou kumuwaiwai, no laila ka holohelehe a me ka hopena ʻano holohelehe ʻana i kou mau hana ʻana a me nā kaukau, no laila ka hoʻomaikaʻi i ka pilina nui ʻana i nā hana a me nā hopena. He hopena nui loa ka Hale Konteena Hoʻomehana, no laila ke holohelehe ʻana iā ia no ka holohelehe nui, ka hōʻike ʻana, a me ka mahiʻai.
Hoʻomaikaʻi i ka hoʻokumu ʻana a me ka hoʻokuʻu ʻana i kēia hale e hiki ke kākoʻo i nā hopena hemahema, he hale no kahi waiwai a he hale no kaukaʻa... a me nā kuaʻāina... Ke kumuhana nei o ka nohona koho loa i kēlā manaʻo e hiki ai i kēia mau hale e pono ana, e koho ana i kou nui a me ka makemake.
Pepehi Ia Me He Aha:
Ke kumuhana ʻana o ka hale konteena kūʻono i loko hōʻike ʻia nō me ka waiwai. Hoʻohana ʻia ke konteena a hoʻokuʻu ʻia mai loko o kou wahi noho, a me ka hoʻomaikaʻi i nā mea kanaka mahope ma loko o kēlā hale konteena kūʻono. Holo ana i mua o ka poʻo, e hoʻomaikaʻi ana i kēia hale i kēia paʻina ma hope o ka hoʻokuʻu.
Ka hoʻoponopono ʻana o ka hopena ʻelua no ka hanaʻana me ka hale konteena kūʻono. Nui kona mau hana, a ʻo ia hoʻi e kuʻu ana i nā hopena kahiko, errishtar, a me ka hooponopono. Me ka makemake ʻana o nā kaukau like ʻole i ka waiwai hiki pū mai, he waiwai nui kekahi no ka hoʻomalu i kou poʻe kumu i ka hopena, ka hooponopono, a me ka hiki i ka poʻe kumu i ka hopena, ua hoʻomaikaʻi nei ka poʻe kumu i ka hopena.
Hale Hoʻomehana ʻAnoʻano: Ke kōkua nō ka hopena i ke kahi ʻekolu, no laila, hoʻoponopono nā poʻe holo ana i ka waiwai. Ma o kēia mea, he waiwai nui keia i hoʻomehana ʻana i nā hopena maikaʻi loa no ka hoʻoponopono a me ka hopena mua. He wahi hoʻomehana ʻanoʻano keia i hiki ke koho ʻana i nā hopena e like me ka waiwai a me ka hopena mua. No laila, hiki ke koho i kēia mea no nā kumu hopena a me nā hopena hoʻomehana ʻana i ka waiwai. Hoʻomehana nui keia i ka hopena mua a me ka hopena ʻanoʻano, a hiki ke koho i kēia mea no ka hoʻomehana ʻana i ka waiwai. Hoʻomehana nui keia i ka hopena mua a me ka hopena ʻanoʻano, a hiki ke koho i kēia mea no ka hoʻomehana ʻana i ka waiwai.
He hopena hoʻomehana ʻanoʻano keia no nā kumuwaiwai hoʻomehana, mai ka hale mua a hiki ʻia ka hopena hoʻomehana ʻana i ka waiwai. Ka hopena ʻanoʻano nui keia no ka hoʻomehana ʻana i nā kumuwaiwai a me nā hopena hoʻomehana ʻana i ka waiwai.
Hoʻomalu:
Nānā no ka hopena, ma ka waeʻaeʻa ʻana i ka hale kōnane e hiki ana i kekahi hoʻolana ʻinoʻino mōhuli no nā hopena o kou nohona. Hoʻopuka ʻia nā nui like ʻole no ka hale kōnane i loko mai o nā hale kūpono, me ka hopena loa a me ka manaʻo e holo pū ana no ka hōʻemi a me ka hōʻikeʻike hoʻokahi, a me ka hōʻomaikaʻi loa no ka hōʻeaʻeaʻe ʻana i nā ʻoihana hoʻomehana maikaʻi & ʻaihui. No laila, he koho ʻinoʻino ka hale kōnane iā ʻoe, i ka makeʻe ʻana i kēia hale hoʻomehana kūpono, e like me ka makahiki, a me ka wahi no ka nohona mahiʻai.
HY, ke kiaʻāina helu o ka ʻaeʻoena wēhi iho ma China, he mea nui no laila ke kōkua holoʻokoʻa hale mea kanu hoʻoponopono a me ka hale LGS i hana ʻia ma mua. Hoʻomaikaʻi ia ke kumu ʻana, ke kaiʻai ʻana a me ka hopena ana i nā koho kōnane wēhi iho.
kōmpania akakui mai na ISO9001, CE, SGS a me nā kākau ʻē aʻe. hale pūnana kōkua holoʻokoʻa, ua like ʻole me ka ʻano ʻeha ʻumi a walu o nā patenti i kaiʻai ʻia ma o kākou makemake pilikia hoʻohana. Ua hōʻike ʻia hoʻi i ka manaʻo ʻelua ana i ka "kōmpania kihei kanaka loa" ma ka hope o ka poʻe ʻōpū, a me ka "Kiaʻāina Hoʻomehana Mea Kanu a me Kaʻawale" a me ka "Hoʻomehana Kiaʻāina Hoʻomehana" ma ka hope o ka moku.
ʻoihana hana kumuwaiwai e kōkua ana i ka holoʻokoʻa hale pūnana ma ka wahi huakaʻi a me ka kumuwaiwai ʻoleloʻolelo. Hōʻea auaneʻi i nā hōʻailona hoʻomaikaʻi oukou no nā hōʻike ʻelua ana i nā hale holoʻokoʻa.
hoʻoponopono nui ke kūkākūkā, ka holo ʻana a me ka waiwai ana i nā hale koho ma mua. Hale konteena papahana, hale koho ma mua hooponopono, hale holo kūpono, hale poʻo waena loko ʻole no nā mea kanu like ʻole hiki ke kōkua.
Hoʻokahiʻana Copyright © Wuqiang County Hongyu Integrated Housing Co.,Ltd Nā Pono Aʻo Like ʻOE - Pōkiʻi Hoʻohana ʻAna