Podstatně všechny podniky, které pokračují, rozhodují marketing. Je to způsob, jak něco cenného ukázat ostatním, kteří mohou mít nebo nemusí mít zájem o to. Navíc pomáhá v promování orga... ">
,需要通过父级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)
}
})
})();
BK25 BF - "Unikátní marketingový nástroj" Podstatně všechny firmy, které jsou stále určeny marketingem. Je to způsob, jak něco hodnotného ukázat druhým, kteří mohou mít nebo nemusí mít zájem o to. Navíc pomáhá při propagaci organizací, které jsou mnoha současnými a bezpečnými nástroji pro marketing, aby se splnila potřebná cíle. BK25 BF25 je ve skutečnosti populární volbou, pokud jde o marketingové nástroje, a navíc stojí méně než tradiční metody marketingu. Druhý způsob, jak tento přístup pomáhá podnikům, je ten, že firmy mohou zamířit přímo na svou cílovou demografii. Reakce generované - firmy tak mohou lépe plánovat vzhledem k tomu, jak jsou jejich marketingové strategie prováděny, s ohledem na důkladnou analýzu. Má velké množství případů v marketingu, takže dává smysl i z tohoto hlediska samozřejmě. Reklama udělala skok, který je určitě obrovský od vzniku BK25 BF25, protože se ukazuje jako jedno výjimečné marketingové nástroje pro kontaktování zákazníků pro firmy. Je to kontinuální služba nebo produkt, který bude trendy s využitím nových metod, jako jsou sociální sítě, e-mailová reklama a marketing vlivových osobností atd. Umožňuje společnostem být daleko před svými soupeři pomocí nejnovějších marketingových nástrojů. Pokud jde o reklamu, bezpečnost je na prvním místě v jakékoli oblasti. BK25 BF25 je poskytován jako marketingový nástroj a veškerá dokumentace k podpoře tohoto bude poskytnuta. Je navržen tak, aby chránil údaje uživatelů a zabezpečoval spojení proti rostoucím bezpečnostním hrozbám. Navíc je zamýšlen tak, aby čelil rizikům spojeným s fragmentovanými náklady na marketingové podvody při podvodných reklamních praktikách. Snadná instalace a provoz BK25 BF25. Marketéři vyvíjejí své projekty, které jsou marketingově spuštěny do fondu uživatelů, kteří splňují nutné požadavky. Umožňuje společnostem měřit účinnost kampaně a upravit své reklamní strategie. No, je to nesporně nástroj, který je určitě dokonalý pro jakoukoli probíhající společnost v jakékoli velikosti a ve všech odvětvích pod mladou Technologií. YOSO je odborník na BK25 BF25 tvarové mechanické přenoseče. Nově postavené velké 6metrové CNC produkční linky jsou schopny vyrábět jednotlivě 6metrové válcové kolejnice v řadě. Maximální velikost kolejnice je 125. Kolejnice mohou být hromadně vyrobeny ve full sérii 25, 30 35, 45 55, 65 85 100, 125. Maximální nosnost jednoho klouzavého bloku je 192 tun. Výrobní základy šroubů vytvářejí dávky s minimálním průměrem Ph6mm, s krokem jednoho milimetru a maximálním průměrem Ph245mm; délka jednoho šroubu 10m a nominální maximální dynamická nosnost 125 tun. Je schopen vyrábět páry kulových šroubů různých velikostí, včetně úrovně C1 délky 2metry a 3metry dávky, 5metrů úroveň C3 a 10 metrů úroveň C5 dávky. YOSO Motion je nejlepím partnerem pro lineární systémy. Bude pracovat s vámi a pomoci vám při Industry 4.0. Vaše vnímání Made in China je jiné. Firma Jingpeng Machinery byla založena v roce 2015 se sídlem v Šanghaji a otevřela svou evropskou pobočku v Polsku v roce 2022, přičemž dále rozšiřuje svoji globální přítomnost. Po deseti letech vývoje se YOSO stala integrovanou obchodní průmyslovou platformou v oblasti mechanického přenosu. Má vlastní značku a mezinárodní patenty. Jingpeng dbá na korporátní styl, který zdůrazňuje "značku stejně jako kvalitu služeb" od samého počátku. YOSO je značka, která nás umožňuje účastnit se mezinárodních výstav, které prezentují tento průmysl každoročně. Kvalita je v srdci udržitelného růstu YOSO. Služby spojují naše zákazníky s obchodními partnery. Jingpeng Machinery se stala vedoucí obchodní platformou pro mechanické přenosy v rámci průmyslu 4.0. Důvěra je postavena na desetiletí výroby bezchybných produktů, 190 inženýrech, kteří provozují 24 výrobní linky, a také na ploše 50 000 m² výrobního prostoru. Každý mechanický přenos vyžaduje desítky pečlivě vybraných výrobních procesů. YOSO se zavázala vyrábět dokonalé produkty. Řešení pro integraci více produktů YOSO, nabízí kompletní přenosové součásti jako jednoznačný zdroj produktů, které vyhovují požadavkům zákazníků. Zavázali jsme se pomáhat zákazníkům být konkurenceschopnější na trhu poskytováním technických řešení, efektivnosti výroby, marketingu, síly značky a kvality produktu. Nabízíme širokou paletu produktů s vynikajícími výkony, které získaly důvěru na trhu díky hlubokému porozumění požadavkům zákazníků. Byly navázány partnery po celém světě s BK25 BF25 vztahy s YOSO, což je součástí strategie mezinárodního rozvoje značky YOSO a jejích distribučních partnerů, aby dosáhli zákazníků v rámci globální sítě. Pokud byste chtěli být zapojeni, kontaktujte mě! Značka: 10 let účasti na mezinárodních výstavách, kvalita je v srdci udržitelného rozvoje. Služby: Zákazníci jako partneři, řešení převodů. YOSO vycvičené odborníky v oblasti součástek pro převody uvnitř společnosti dokonale analyzují požadavky zákazníků BK25 BF25. 3D modely dokončených produktů usnadňují uspořádání výroby. Průmyslová výměna - YOSO hodnotí každé průmyslové akce, které jsou známé po celém světě a aktivně se účastní výměny mezi praktiky, inovativními podnikateli a vedoucími společnostmi, což je důležité pro náš růst. Všechno, co musí udělat, je se zaregistrovat na účet na platformě a propagovat pro společnost, která by chtěla použít funkci BK25 BF25. Zahrnují ty, komu by chtěli ukázat svou kampani, jaký rozpočet mají pomocí skutečného počtu lidí před nimi. Společnosti budou sledovat, jak probíhá kampaň ihned poté, co začne běžet, a mohou dělat změny podle potřeby. Lidé, kteří to použili dříve, tvrdí, že BK25 BF25 si zaslouží být hrdě umístěno na seznamu spokojených zákazníků. To je určitě jedna z nejlepších možností. Toto je opravdu velmi jednoduchá platforma, která navíc nabízí pomoc služby zákaznické podpory pro vyřešení jakéhokoli problému, který narazíte. Navíc služba nabízí návody a mnoho webinarů zaměřených na pomáhání firemám dostat maximum z jejich marketingových kampaní. Více kvality v marketingu - BK25 BF25 je vytvořeno prostřednictvím pečlivého procesu určeného pro kvalitní marketingové kampaně organizací. Ano! Na platformě je k dispozici mnoho různých marketingových nástrojů a zdrojů navržených tak, aby pomáhaly firmám optimalizovat své digitální marketingové úsilí.
Všechna práva vyhrazena © Jingpeng Machinery&Equipment(Shanghai) Co.,Ltd
BK25 BF25
Výhody:
Inovace:
Bezpečnost:
Použití:
Why choose Jingpeng BK25 BF25?
YOSO nabízí konkurenceschopnější produkty
Profil společnosti YOSO
Nejlepší partner pro lineární pohyb
Industrie 4.0 nejlepší platforma
Jak používat:
Služba:
Kvalita:
Nemůžete najít, co hledáte?
Vyžádevat nabídku nyní
Kontaktujte naše konzulty pro více dostupných produktů.