Lurer du på hvordan sette opp midlertidig bolig i Algeriet uten å vente ... ">
,需要通过父级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) } }) })();
Kom Ut Av Tradisjonelle Boligløsninger og La Portabel Toalett Og Sanitær">'+Les MerFoldable Container House Som En Innovativ Løsning For Boplassningsbehov
Leter du etter en måte å sette opp midlertidig bolig i Alger uten å vente for lenge eller bruke mye penger? Se på foldbart containerhjem! Ja, alle de nytte og komfortene du kan få fra et tradisjonelt hjem, men denne gangen uten restriksjoner - alt i én 425-fots rom lagt ut for deltakere å oppleve live.
Long te Container house foldable tilbyr en rekke åpenbare fordeler i forhold til tradisjonelle boligvalg. For det første, er det utrolig lettvint og transportabelt - perfekt for reisende. I tillegg er mulighetene uendelige, og du kan velge NØYAKTIG hva som passer dine ønsker eller brukssituasjon. Det er også miljøvennlig og bærekraftig - gjenvinner gamle skipstransportere som ellers ville blitt kastet på en deponi.
Sammendrag Foldable containerhuset er et kreativt tiltak innenfor boligsektoren. De romslagende, sammenleggbare lasteboks-husene ved Filetti Slim Apartments av James Law er en bemerkelsesverdig serie modulære hjem designet for å puste mer innside i mindre ytre. Dette er egenskapen som gjør foldable containerhus kostnadseffektivt. Som et resultat, er de generelt lavprisige i forhold til typiske hjem>[]
Sikkerhet er ingenting viktigere enn andre for å beskytte oss trygt fra alle barbare forhold med en foldbar containerhus. Denne konstruksjonen er bygget sterk med veerpåvirkningsmotstandige materialer som varer sesong etter periode, og derfor er vedlikehold nødvendig fordi aldri opptrer, som oftest bare har den svingedørspanelen kan møte med.
Bruk: som er designet og bygget som en foldbar, containerhus kan brukes til flere behov som hjemmebolig eller feriebolig... gjennom kontorrom... denne arkitektoniske formen av tilpasning har gjort dem til en attraktiv valg for folk som ønsker billige, raskt bygde hus – bare lagd for å dekke dine behov og ikke preferanser. Hvordan bruk: foldbart containerhus bruk er relativt enkel; containeren blir deretter transportert til ditt område og satt opp på plass. Leveres med nødvendige materialer for plombering, varme og strøm; inne i hvert foldbare containerhus redigeres til slutt bare på noen få dager etter installering. Service: med vårt foldbare containerhus, vår dedikasjon er å gi en god serviceopplevelse. Våre tjenester er mange, og inkluderer referanse til Ishtars tilpassede leveranse og installasjon, med alle som trenger litt hjelp fra tid til annen, er våre ekspertiser alltid tilgjengelige for å veilede og assistere deg under kjøpet, installeringen, eller selv etter at prosessen er fullført, ettersom vi setter kundelykke over alt ved å gi dem en opplevelse de vil like. Kvalitet: Foldbart Containerhus: Kvalitet er alltid nr. 1. Hver av boksene våre er bygd av høykvalitetsmaterialer spesifikt valgt for deres styrke og holdbarhet, tilbyr noe som varer lenge. Vi tilbyr absolutt forskjellige tilpassingsløsninger for å sikre at våre kunder får nøyaktig det de ønsker. De forsterker faktumet at vi er dedikerte til å løse våre boligproblemer på en måte som fortsatt skal være fordigelig flere tiår framover.
Anvendelse: Dette foldbare containerhuset kan brukes for en bred vifte av prosjekter fra hovedboliger til et unnskap, kontorrom og mange andre bruksmuligheter. Spesielt attraktivt er den utypiske tilpasningen av hver enhet for å oppfylle ønskene og kravene til de som leter etter en økonomisk tilgjengelig boligalternativ som også er raskt å installere. Konklusjon: I konklusjon er det foldbare containerhuset en dør mot en industriell løsning for individer. Vår valg av Foldbart Containerhus gir deg makt over din livserfaring i forhold til tradisjonell bolig, så lenge portabilitet og enkel selv/integrert modifikasjon for deg og dine kunder samtidig som å opprettholde høy kvalitet på tjenester og produkter. Foldbart containerhus er den beste valget hvis du skal bruke det permanent som hjem, ferie eller arbeidssted.
Ved å være designet og bygget som et bøyebart hus, kan containerhus brukes til flere behov, slik som bolig eller feriebolig... gjennom kontorer... Denne arkitektoniske formen av tilpasning har gjort dem til en attraktiv valg for folk som ønsker billig, rask bygging - kun laget for å oppfylle dine behov og ikke preferanser.
Hvordan bruke:
Bruken av foldbar containerhus er relativt enkel. Containere transporteres deretter til ditt område og settes opp på plass. Leveres med nødvendige installasjonsmaterialer for plombering, varme og strøm inni, er hvert foldbare containerhus fullstendig forberedt bare noen få dager etter installasjonen.
Vår dedikasjon er å tilby en fremragende tjenesteopplevelse med våre foldbare containerhuser. Våre tjenester er omfattende og inkluderer ref-errishtar-s-spesialleveranse-og-installasjon. Med alle som trenger litt hjelp fra tid til annen, er våre ekspertter alltid tilgjengelige for å veilede og bistå deg under kjøpet, installasjonen eller selv etter at prosessen er fullført, ettersom vi setter kundelykke over alt og ønsker å gi dem en opplevelse de vil like.
Container House Foldable: Kvalitet er alltid nummer en. Hver av boksene våre lages av høykvalitetsmaterialer som er spesifikt valgt for deres styrke og varighet, for å sikre et langvarig produkt. Vi tilbyr også helt ulike tilpassingsløsninger for å garantere at våre kunder får akkurat det de ønsker. I tillegg understryker de at vi er dedikerte til å løse våre boligutfordringer på en måte som fortsatt skal være rimelig flere tiår framover.
Denne foldbare containerhuset egner seg for mange anvendelser, fra hovedbolig til en nødellenheter eller kontor. Den unike tilnærmingen når det gjelder tilpassing oppfyller kravene og preferansene til individer på jakt etter en kostnadseffektiv boligløsning som leveres raskt.
Konklusjon:
Konklusjon Kort sagt gjør foldbart containerhus til en ekstraordinær produktiv alternativ for alle dine boligbehov. Vår Foldable Container House-tilbud gir en rikdom av fordeler i forhold til tradisjonell bolig, inkludert transportføyhet og frihet for selv/custom-modifikasjoner og deler også sin sterke fokus på høykvalitets tjenester & produkter. Foldable Container House er den perfekte valget for deg hvis du trenger et permanent boligsted, ferie eller sted å jobbe.
HY, markedsfører i kinesisk lettmetalbyggindustri, har alltid plassert utviklingen av energieffektive og grønne LGS prefabrikerte bygninger øverst på sin liste. Det er engasjert i studiet, utviklingen og anvendelsen av lettmetallstrukturer som sparer energi.
selskapet er sertifisert av ISO9001, CE, SGS og flere andre sertifikater. Foldbart containerhus har mer enn 18 patent som er beskyttet under uavhengig eide immaterielle rettigheter. Det ble anerkjent som et "høyteknologiselskap" på nasjonalt nivå, et "Vitenskapsteknologiselskap med små og mellomstore virksomheter" og et "Innovative små og mellomstore virksomheter" på fylkesnivå.
ferdigbygget hus i container som kan bøyes på stedet og også tilby online teknisk support. Vi er rede til å løse alle spørsmål du eventuelt har om ferdigbyggede hjem.
hovedfokus på produksjon, transport og bygging av ferdigbyggede hjem. Lys, bøyebar forhåndsbygget hjem, utvidbare huser, romkapsler hjem og mange andre produkter er våre hovedtilbud.
Opphavsrett © Wuqiang County Hongyu Integrated Housing Co., Ltd Alle rettigheter forbeholdt - Personvernerklæring