I princip alla företag som fortsätter att bedriva beslutas av marknadsföring. Detta är ett sätt att visa något av värde för andra, som antingen kan ha eller inte ha en intresse för det. Dessutom hjälper det i promotionen av 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 - "Ett Unikt Marknadsföringsverktyg" I princip alla företag som fortsätter att bestämma sig för marknadsföring. Detta är ett sätt att visa något av värde för andra som kan ha intresse för det eller inte. Dessutom hjälper det vid främjandet av organisationer där det finns många moderna och säkra verktyg för reklam för att möta de nödvändiga målen. BK25 BF25 är faktiskt en populär val när det gäller marknadsföringsverktyg, det kostar också mindre än traditionella marknadsföringsmetoder. Sättet som detta hjälper företag på, är att företag kan gå rakt in på sitt målpublikum. Den respons som genereras - företag kan därmed planera bättre när det gäller hur deras marknadsstrategier genomförs, med hjälp av en grundlig analys. Det finns en hel del fall inom marknadsföring där detta används, så det gör också fullt ut sense av den anledningen också. Reklam har gjort ett hopp som är säkert jättestort sedan införandet av BK25 BF25 eftersom det dyker upp som ett undantagligt marknadsföringsverktyg för att nå ut till kunder för företag. Det är en pågående tjänst eller produkt som kommer att trenda med nya metoder som sociala nätverk, e-postmarknadsföring och influencer-marknadsföring och så vidare. Det gör det möjligt för företag att vara långt framför sina konkurrenter genom att använda de senaste marknadsföringsverktygen. När vi marknadsför, är säkerhet det viktigaste aspekten i alla områden. BK25 BF25 ges som en reklamdrivning och all dokumentation som stöder detta ges också. Det är designat för att skydda användardata och säkra anslutningar mot växande säkerhetsrisker. Dessutom är det tänkt att motverka riskerna som är fragmenterade kostnader för marknadsföringsbedrägerier över bedrägliga reklampraktiker. Enkel installation och drift BK25 BF25 Marknadsförare utvecklar sina projekt som ska lanseras marknadsföringsmässigt till en pool av användare som uppfyller nödvändiga krav. Det gör det möjligt för företag att mäta kampanje-effektiviteten och förfinna sina reklamstrategier. Jo, det är utan tvekan ett verktyg som är perfekt för alla pågående företagsstorlekar och varje bransch under ung teknik. YOSO är expert på BK25 BF25 formerade mekaniska transmissioner. Nybyggda storskaliga 6-meters CNC-produktionslinjer kan producera enstaka 6-meters rullningsguidrar i stora mängder. Den maximala storleken på guiden är 125. Guidarna kan massproduceras i hela serien 25, 30, 35, 45, 55, 65, 85, 100, 125. Den maximala lastbärningsförmågan för en enskild glidare är 192t. Skruvproduktionsanläggningarna skapar batchar med en minsta diameter på Ph6mm, en millimeters drag och en maximal diameter på Ph245mm; en skruvs längd är 10m med en nominal max dynamisk last på 125 ton. Det kan producera kugelskruvpär från olika storlekar, inklusive C1 nivåer på 2-meter och 3-meter batchar, 5-meter C3 nivå och 10-meter C5 nivåer. YOSO Motion är din bästa partner för linjära system. Vi kommer att arbeta tillsammans med dig för att hjälpa till med Industri 4.0. Din uppfattning gör Kina annorlunda. Jingpeng Machinery grundades 2015 med huvudkontor i Shanghai och lanserade sin EU-avdelning i Polen 2022 och fortsätter att förstärka sitt globala närvaro. Efter 10 års utveckling har YOSO blivit en integrerad handelsindustriell plattform inom fältet mekanisk överföring. Den har sina egna märken och internationella patent. Jingpeng har hållit fast vid företagets stil och betonat "märke liksom servicekvalitet" från början. YOSO är ett märke som gör det möjligt för oss att delta i internationella evenemang där industrin visas varje år. Kvalitet ligger i hjärtat av YOSOs hållbara tillväxt. Service gör våra kunder till affärspartner. Jingpeng Machinery har blivit en ledande inköpsplattform för mekaniska överföringar inom industri 4.0. Denna konfidens bygger på 10 års produktion av fellösa produkter, 190 ingenjörer som arbetar på 24 produktionslinjer samt en produktionsyta på 50 000 kvadratmeter. Varje mekanisk överföring kräver flera noga utvalda produktionsprocesser. YOSO är engagerad i att producera perfekta produkter. Lösning för integrering av flera produkter YOSO, erbjuder fullständig kontroll över sändningskomponenter med en-stop-produkter som uppfyller kundkraven. Vi är engagerade i att hjälpa våra kunder att bli mer konkurrenskraftiga på marknaden genom att tillhandahålla tekniska lösningar, fabriks-effektivitet och marknadsföring, märkesstyrka och produktkvalitet. Vi erbjuder en produktlinje med ett brett utbud av högpresterande produkter som har vunnit förtroende på marknaden tack vare vår djupa förståelse för kundbehoven. Partnere runt om i världen har etablerat relationer BK25 BF25 med YOSO, och YOSOs internationella strategi för märkesdistributörer når kunder i alla regioner via ett globalt nätverk. Om du vill bli involverad, kontakta mig! Varumärke: 10 års deltagande i internationella utställningar. Kvalitet som ligger i hjärtat av hållbar utveckling. Service: Kundparter. Transmissionslösningar. YOSO tränade professionella inom transmissionskomponenter inom företaget kan perfekt analysera kundens BK25 BF25 krav. 3D färdiga produktmodeller underlättar produktionen. Branschutbyte. YOSO sätter hög värde på varje branschevenemang som är välkända runt om i världen och engagerar sig aktivt i utbyten mellan praktiker, framtidsorienterad tillämpning, entreprenörskap och ledande företag som är viktigt för vår växt. Allt de behöver göra är att registrera sig för kontot på plattformen och marknadsföra för ett företag som vill använda BK25 BF25-funktionen. INKORPORERA vem de också vill visa sin kampanj för, vilken budgetplan de har med hjälp av den verkliga mängden människor framför dem. Företag kommer att observera hur kampanjen går direkt efter att den går live och kan göra ändringar när det behövs. Personer som har använt det tidigare påstår att BK25 BF25 kan stolt läggas på listan över kunder, och detta är säkert toppen. Detta är verkligen en extremt enkel plattform med även kundtjänstlig hjälp för att lösa alla problem du hittar. Dessutom erbjuder tjänsten handledningar och flera webbinarium riktade på att hjälpa företag att få mest möjliga utav sina marknadsföringskampanjer. Mer Kvalitet i Marknadsföring - BK25 BF25 skapas genom att gå igenom en kontinuerlig process som är noggrann och används för högkvalitativa marknadsföringskampanjer av företag. Ja! Det finns många olika typer av marknadsföring och resurser tillgängliga för företag på plattformen, som är designade för att hjälpa dem att optimera sina digitala marknadsföringsinsatser.
Upphovsrätt © Jingpeng Machinery&Equipment(Shanghai) Co.,Ltd Alla rättigheter förbehålls
BK25 BF25
Fördelar:
Innovation:
Säkerhet:
Användning:
Why choose Jingpeng BK25 BF25?
YOSO erbjuder mer konkurrenskraftiga produkter
Företagsprofil YOSO
Bästa partner för linjär rörelse
Industrie 4.0 bästa plattform
Användning:
Tjänst:
Kvalitet:
Hittar du inte det du letar efter?
Begär offert nu
Kontakta våra konsulter för fler tillgängliga produkter.