Eigenlijk worden alle bedrijven die doorgaan bepaald door marketing. Dit is een manier om iets van waarde te tonen aan anderen die mogelijk wel of niet geïnteresseerd zijn. Bovendien helpt het bij het bevorderen van 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 - "Een uniek marketingspeciaal" Eigenlijk alle bedrijven die doorgaan met beslissingen op marketing gebaseerd. Dit is een manier om iets van waarde te tonen aan anderen die mogelijk wel of geen interesse hebben in wat dan ook. Bovendien helpt het bij het promoten van bedrijven waarbij moderne en veilige tools voor marketing worden gebruikt om de vereiste doelen te bereiken. De BK25 BF25 is eigenlijk een populaire optie wat betreft marketingsmiddelen, het kost ook minder dan traditionele marketingsmethoden. De tweede manier waarop dit bedrijven helpt, is dat bedrijven rechtstreeks contact kunnen leggen met hun doelgroep. Het opgeleverde antwoord - bedrijven kunnen dus beter plannen wat betreft hoe hun marketingsstrategieën worden uitgevoerd, volgens een grondige analyse. Het heeft een heleboel voorbeelden in de marketing, dus het heeft ook zin om deze reden naturally. De advertentie heeft een sprong gemaakt die zeker gigantisch is bij de introductie van BK25 BF25 omdat het zich ontwikkelde tot een uitzonderlijk marketingsinstrument voor het bereiken van klanten voor bedrijven. Het is een lopende service of product dat trends creëert met nieuwe methoden zoals social media, e-mailcampagnes en influencermarketing enzovoort. Dit maakt het mogelijk voor bedrijven om ver voor hun concurrenten uit te zijn door gebruik te maken van de nieuwste marketingsmiddelen. Bij ons marketing is veiligheid altijd primair in elke sector. De BK25 BF25 wordt aangeboden als een marketingservice en alle documentatie om dit te ondersteunen wordt verstrekt. Het is ontworpen om consumentengegevens te beschermen en verbindingen veilig te houden tegen opkomende beveiligingsrisico's. Bovendien is het bedoeld om de risico's aan te pakken die voortkomen uit gefragmenteerde kosten van marketingfraude door misleidende advertentiemethoden. Eenvoudige installatie en bedrijfsvoering BK25 BF25 Marketeers ontwikkelen hun projecten die worden gelanceerd naar een groep gebruikers die aan de noodzakelijke eisen voldoen. Het laat bedrijven toe om de effectiviteit van campagnes te meten en hun advertentiestrategieën te verfijnen. Nou, het is ongetwijfeld een tool die perfect is voor elke lopende bedrijfsgrootte en elke sector onder jonge Technologie. YOSO is expert in BK25 BF25 vormen van mechanische transmissies. Nieuw gebouwde grote schaal 6-meter CNC productielijnen kunnen enkele 6-meter rollende gidsen rails in grote hoeveelheden produceren. De maximale grootte van de gidsrail is 125. Gidsrails kunnen in serie geproduceerd worden in volledige reeksen 25, 30, 35, 45, 55, 65, 85, 100, 125. De maximale druklastcapaciteit van een individuele glijder is 192t. Schroefproductiebases maken batches met een minimale diameter Ph6mm, een millimeter pas en een maximale diameter Ph245mm; één schroef heeft een lengte van 10m en een nominale maximale dynamische belasting van 125 ton. Het kan ballenschroevenparen van verschillende maten produceren, inclusief C1 niveaus van 2-meter en 3-meter batches, 5-meter C3 niveau en 10 meter niveau C5 niveaus. YOSO Motion is uw beste partner voor lineaire systemen. Het zal samen met u werken om Industry 4.0 te helpen. Uw perceptie maakt Made in China anders. Jingpeng Machinery stichtte in 2015 zijn hoofdkantoor in Shanghai en lanceerde een EU-filiaal in Polen in 2022, terwijl het blijft uitbreiden op wereldschaal. Na 10 jaar van ontwikkeling is YOSO uitgegroeid tot een geïntegreerd handels- en industrieplatform in het veld van mechanische transmissies. Het heeft zijn eigen merknaam en internationale patenten. Jingpeng houdt zich aan een bedrijfsstijl die de nadruk legt op 'merk evenals servicekwaliteit' vanaf het begin. YOSO is een merk dat ons in staat stelt om deel te nemen aan internationale tentoonstellingen die de industrie jaarlijks laten zien. Kwaliteit staat centraal in de duurzame groei van YOSO. Service maakt onze klanten tot zakelijke partners. Jingpeng Machinery is geworden tot een leidende aankoopplatform voor mechanische transmissies in de context van Industrie 4.0. Deze vertrouwenwording berust op 10 jaar van productie zonder fouten, 190 ingenieurs die al werkzaam zijn op 24 productielijnen, evenals een productieruimte van 50.000m2. Elke mechanische transmissie vereist tientallen zorgvuldig geselecteerde productiestappen. YOSO is vastbesloten perfecte producten te produceren. Meerproducten Integratieoplossing YOSO, biedt complete controle over transmissiecomponenten een-stopwinkel-producten die aan klantvereisten voldoen. We zijn toegewijd om klanten te helpen concurrerender te zijn op de markt door technische oplossingen, fabrieks-efficiëntie en marketing, merkkracht en productkwaliteit. We bieden een productbereik met een breed assortiment dat uitstekende prestaties levert en vertrouwen heeft gekregen op de markt door een diepgaande kennis van klantbehoeften. Partners over de hele wereld hebben relaties gevestigd met BK25 BF25 binnen YOSO, waardoor het internationalisatieplan van het YOSO-merk dealers bereikt in regio's via een wereldwijd netwerk. Als u betrokken wilt raken, neem dan contact met mij op! Merk: 10 jaar deelname aan internationale tentoonstellingen, kwaliteit in het hart van duurzame ontwikkeling. Service: klanten als partners. Transmissieoplossingen, YOSO-gecertificeerde professionals analyseren binnen het bedrijf perfect de eisen van klanten voor BK25 BF25 transmissiecomponenten en bieden 3D-eindproductmodellen om de productiearrangementen te vergemakkelijken. Branchenuitwisseling, YOSO waardeert elke brancheactiviteit die wereldwijd bekend is en neemt actief deel aan uitwisselingen tussen praktici, toekomstgerichte toepassingen, ondernemerschap en leidende bedrijven, wat essentieel is voor onze groei. Alles wat ze hoeven te doen is zich registreren voor het account van de platform en promoten voor een bedrijf dat graag gebruik wil maken van de BK25 BF25 functie. INCLUSIEF wie ze ook graag willen laten zien hun campagne, welk budgetplan ze hebben met het echte aantal mensen voor hen. Bedrijven zullen de campagne direct volgen nadat deze live gaat en kunnen veranderingen aanbrengen zoals nodig. Mensen die het al eens hebben gebruikt beweren dat BK25 BF25 trots op de lijst van klanten mag worden gezet, dit is zeker top. Dit is een zeer eenvoudig platform met ook klantenservice om elk probleem dat je tegenkomt te helpen oplossen. Bovendien biedt de service tutorials en verschillende webinars gericht op het helpen van bedrijven om het maximale uit hun marketingscampagnes te halen. Meer Kwaliteit in Marketing - De BK25 BF25 wordt gemaakt door middel van een continu proces dat zorgvuldig wordt toegepast voor topmarktingcampagnes van bedrijven die erop gericht zijn. Ja hoor! Er zijn veel verschillende marketingmethoden en bronnen beschikbaar voor bedrijven op het platform, ontworpen om te helpen bij het optimaliseren van hun digitale marketingspanningen.
Copyright © Jingpeng Machinery&Equipment(Shanghai) Co.,Ltd Alle rechten voorbehouden
BK25 BF25
Voordelen:
Innovatie:
Veiligheid:
Gebruik:
Why choose Jingpeng BK25 BF25?
YOSO biedt concurrerender producten
Bedrijfsprofiel YOSO
Beste partner voor lineaire beweging
Industrie 4.0 beste platform
Hoe-te-gebruiken:
Service:
Kwaliteit:
Niet vinden wat u zoekt?
Vraag nu een offerte aan
Neem contact op met onze consultants voor beschikbare producten