Recherchez un moyen de mettre en place un logement temporaire en Algérie sans attendre ... ">
,需要通过父级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) } }) })();
        Abandonnez les solutions de logement traditionnelles et optez pour des toilettes portables et des équipements sanitaires">'+En savoir plusMaison Conteneur Pliable comme Solution Innovante pour les Besoins de Logement
Recherchez-vous un moyen de mettre en place un logement temporaire en Algérie sans attendre trop longtemps ou dépenser beaucoup ? Découvrez la maison conteneur pliable ! Oui, toutes les commodités et confort que vous pouvez obtenir dans une maison traditionnelle, mais cette fois sans restriction - tout cela dans une seule pièce de 425 pieds carrés présentée aux participants pour qu'ils puissent l'expérimenter en direct.
Le Long te Container house pliable offre un certain nombre d'avantages évidents par rapport aux options de logement traditionnelles. Premièrement, il est incroyablement léger et portable - idéal pour les voyageurs. Ajoutez à cela que les possibilités sont infinies et vous pouvez choisir EXACTEMENT ce qui convient à vos besoins ou à votre cas d'utilisation. Il est également écologique et durable - recyclant des vieux conteneurs de transport qui seraient sinon laissés dans une décharge.
Résumé Le conteneur maison pliable est une approche créative du logement. Les maisons modulaires Filetti Slim Apartments par James Law, avec leurs conteneurs de cargaison économisant de l'espace et pouvant se plier, représentent une remarquable gamme de maisons modulaires conçues pour maximiser l'intérieur tout en minimisant l'extérieur. C'est cette caractéristique qui rend le conteneur maison pliable économique. En conséquence, ils sont généralement moins chers par rapport aux maisons classiques>[]
La sécurité n'est rien de plus important que d'autres aspects pour l'habitation et la protection sûre contre toutes les conditions barbares avec une maison-conteneur pliable. Cette structure est construite solidement avec des matériaux résistants aux intempéries qui durent saison après saison, et ainsi l'entretien est essentiellement requis simplement à cause de l'usure liée à l'âge, qui souvent ne concerne que le panneau de la porte coulissante.
Utilisation : étant conçu et construit comme une maison conteneur pliable, elle peut répondre à plusieurs besoins tels que la résidence principale ou secondaire... en passant par des bureaux... cette forme d'architecture adaptable les a rendus attractifs pour les personnes souhaitant une maison abordable et rapide – construite uniquement pour satisfaire vos besoins et non vos préférences. Comment utiliser : l'utilisation de la maison conteneur pliable est relativement simple ; le conteneur est ensuite transporté sur votre site et installé en place. Fourni avec les matériaux nécessaires pour la plomberie, le chauffage et l'électricité ; à l'intérieur de chaque maison conteneur pliable, tout est finalement configuré en quelques jours après l'installation. Service : avec notre maison conteneur pliable, notre engagement est de fournir une excellente expérience de service. Nos services sont vastes et incluent la livraison et l'installation personnalisées, avec toujours un peu d'aide dont chacun a besoin de temps en temps, nos experts sont toujours disponibles pour vous guider et vous assister lors de votre achat, de l'installation, ou même après que ce processus soit terminé, car nous privilégions avant tout la satisfaction du client en leur offrant une expérience qu'ils apprécieront. Qualité : Maison Conteneur Pliable : La qualité est toujours prioritaire. Chacune de nos unités est fabriquée à partir de matériaux de haute qualité spécialement choisis pour leur solidité et leur durabilité, offrant un produit durable. Nous proposons également des solutions de personnalisation complètement différentes pour garantir que nos clients obtiennent exactement ce qu'ils désirent. Cela met en évidence notre dévouement à résoudre les problèmes de logement de manière abordable encore pendant des décennies.
Application : Cette maison conteneur pliable peut être utilisée pour une large gamme de projets, des maisons principales à une unité d'évasion, en passant par un bureau de travail et bien d'autres usages. Ce qui est particulièrement attractif, c'est la personnalisation atypique de chaque unité pour répondre aux désirs et aux besoins de ceux qui recherchent une alternative de logement financièrement abordable, qui est également rapide à installer. Conclusion : En conclusion, la maison conteneur pliable est une solution industrielle pour les individus. Notre option de Maison Conteneur Pliable vous donne le pouvoir sur votre expérience de vie par rapport au logement traditionnel, offrant ainsi une portabilité et une facilité de modification autonome pour vous et vos clients tout en maintenant une haute qualité de service et de produits. La maison conteneur pliable est le meilleur choix, que vous l'utilisiez de manière permanente comme habitation, pour les vacances ou pour le travail.
Conçue et construite comme une structure pliable, la maison en conteneur peut répondre à plusieurs besoins tels que résidence principale ou habitation de vacances... jusqu'aux bureaux... Cette forme d'architecture adaptable les a rendues une option attractive pour les personnes souhaitant des maisons abordables et rapides - conçues uniquement pour satisfaire vos besoins et non vos préférences.
Mode d'emploi :
L'utilisation de la maison-conteneur pliable est relativement simple. Le conteneur est ensuite transporté sur votre site et installé en place. Fourni avec les matériaux nécessaires pour la plomberie, le chauffage et l'électricité à l'intérieur, chaque maison-conteneur pliable est finalement prête seulement quelques jours après l'installation.
Notre engagement est de fournir une excellente expérience de service avec notre maison-conteneur pliable. Nos services sont vastes et incluent la livraison et l'installation personnalisées. Comme tout le monde a besoin d'un peu d'aide de temps en temps, nos experts sont toujours disponibles pour vous guider et vous assister lors de votre achat, de l'installation ou même après que ce processus soit terminé, car nous privilégions avant tout le bonheur des clients en leur offrant une expérience qu'ils apprécieront.
Maison Container Démontable : La qualité est toujours en tête. Chacun de nos conteneurs est fabriqué à partir de matériaux haut de gamme spécialement choisis pour leur solidité et leur durabilité, garantissant un produit durable. Nous offrons également des solutions de personnalisation variées pour nous assurer que nos clients obtiennent exactement ce qu'ils souhaitent. De plus, ils soulignent notre engagement à répondre aux problèmes de logement de manière abordable, même dans les décennies à venir.
Ce conteneur maison pliable convient à de nombreuses applications, d'une maison principale à une unité de secours ou un bureau de travail. L'unicité en termes de personnalisation répond aux besoins et préférences des individus à la recherche d'une solution de logement abordable livrée rapidement.
Conclusion :
Conclusion : en résumé, la maison conteneur pliable constitue une alternative exceptionnelle et ingénieuse pour répondre à tous vos besoins de logement. Notre option de maison conteneur pliable offre un ensemble de avantages par rapport au logement conventionnel, y compris la portabilité et la liberté de modifications personnalisées, tout en mettant l'accent sur des services et produits de haute qualité. La maison conteneur pliable est le choix idéal si vous avez besoin d'une résidence permanente, d'un lieu de vacances ou d'un espace de travail.
HY, leader du marché dans l'industrie de la construction en acier léger en Chine, a toujours placé la maison conteneur pliable parmi les bâtiments préfabriqués économes en énergie et écologiques en tête de liste. Elle s'engage dans l'étude, le développement et l'application des structures en acier léger qui économisent l'énergie.
entreprise accréditée par ISO9001, CE, SGS et diverses autres certifications. Maison conteneur pliable, possède plus de 18 brevets protégés sous des droits de propriété intellectuelle détenus indépendamment. Elle a été reconnue comme une « entreprise haute-technologie » au niveau national, « Petite ou moyenne entreprise de science et technologie » et « Petite ou moyenne entreprise innovante » au niveau provincial.
équipe de construction qualifiée capable de fournir une assistance technique en ligne ainsi que sur place pour la maison conteneur pliable. Nous sommes prêts à répondre à toutes vos questions concernant les maisons préfabriquées.
principal concentration sur la production, le transport et la construction de maisons préfabriquées. Les maisons légères en conteneur pliable, les maisons préfabriquées extensibles, les maisons en capsules d'espace et de nombreux autres produits sont des offres principales.
Droits d'auteur © Wuqiang County Hongyu Integrated Housing Co., Ltd Tous droits réservés - Politique de confidentialité