Periaatteessa kaikki jatkuvat yritykset päättävät markkinoinnin avulla. Tämä on tapa näyttää jotakin arvoista muiden ihmisten, jotka saattavat tai eivät saattaa olla kiinnostuneita siitä. Lisäksi se auttaa markkinointiorga... ">
,需要通过父级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 - "Yksilöllinen markkinointityökalu" Periaatteessa kaikki yritykset, jotka jatkuvat markkinoinnin ohjauksessa. Tämä on tapa näyttää jotakin arvoista muiden ihmisten kannalta, jotka saattavat tai eivät ehkä kiinnosta siitä. Lisäksi se auttaa edistämään yrityksiä, jotka ovat monimutkaisia ja turvallisia työkaluja markkinointiin, jotta voidaan täyttää asetetut tavoitteet. BK25 BF25 on todellakin suosittu vaihtoehto markkinointityökalujen osalta, ja se maksaa myös vähemmän kuin perinteiset markkinointimenetelmät. Tavan toinen etu yrityksille on se, että ne voivat päästä suoraan kohderyhmänsä luo. Tuottama vastaus - yritykset voivat siten suunnitella paremmin markkinointistrategioitaan ottamalla huomioon perusteellisen analyysin. Se sisältää myös suuren määrän markkinointi tapauksia, joten se on myös järkevää tästä syystä. Mainonta on saavuttanut suuren edistyksen, joka on varmasti jättiläinen BK25 BF25 -ratkaisun kehittymisen myötä, koska se ilmenee yhtenä erityisenä markkinointivälineenä asiakkaiden saavuttamiseksi yrityksille. Se on jatkuva palvelu tai tuote, joka trendaa käyttämällä uusia keinoja, kuten sosiaalista mediaa, sähköpostimainontaa ja vaikutusihmis-mainontaa jne. Se mahdollistaa yritysten pysyvän etuna kilpailijoitaan käyttämällä uusimpia markkinointityökaluja. Olemme edistyneet niin, että turvallisuus on aina ensisijainen huolenaihe kaikissa toimintoihimme. BK25 BF25 tarjotaan mainonnaksi, ja kaikki sen tukemiseen liittyvä dokumentaatio on saatavana. Se on suunniteltu suojelemaan käyttäjän tietoja ja turvaamaan yhteyksiä kasvavilta turvallisuusriskiltä. Lisäksi se on suunniteltu vastaamaan riskejä, jotka liittyvät osittaisiin markkinointihoitojen huijariskiin petollisten mainonnakäytäntöjen kautta. helpppo asennus ja toiminta BK25 BF25 Marketerit kehittävät projektejaan, jotka markkinointi käynnistää käyttäjien keskuuteen, jotka täyttävät tarpeelliset vaatimukset. Se mahdollistaa yritysten mitata kampanjan tehokkuutta ja tarkentaa mainosstrategioitaan. No, se on epäilemättä työkalu, joka on varmasti loistava jokaiselle jatkuvalle yrityksen koon ja jokaiselle teollisuuden alalle nuoren teknologian alla. YOSO on asiantuntija BK25 BF25 muodostamisessa mekaanisissa siirroissa. Uusien suurten mittakaavaisia 6-metrin CNC tuotantolinjoja voidaan käyttää yhden 6-metrin vieruskäytävien raidevalmisteiden valmistamiseen useita kertoja. suurin käytävän raiteen kokoluokka on 125. vieruskäytävät voidaan massatuottaa täysin sarjassa 25, 30 35, 45 55, 65 85 100, 125. yksittäisen liukkaiden maksimikuorma-kyky on 192t. Niipikkeiden tuotantobaset voivat luoda eri kuormituksia, jotka ovat vähimmäismitta Ph6mm, yhden millin kohdalla ja suurin halkaisija Ph245mm; yksi niipikkö voi olla 10m ja arvioitu maksimi dynaaminen kuormitus 125 tonnia. Se pystyy tuottamaan pallojen niipikköparit eri koossa, mukaan lukien C1 tasoja 2-metrin 3-metrin erissä, 5-metrin C3 tason ja 10 metrin C5 tasoa. YOSO Motion on paras lineaarinen järjestelmä kumppani. se työskentelee kanssasi auttaaksesi teollisuutta 4.0:ssa. Sinun havaintosi tekee Kiinan valmistusta erilaiseksi. Jingpeng Machinery perusti vuonna 2015 pääkonttorinsa Shanghaiin ja perusti EU-toimiston Puolassa vuonna 2022 sekä jatkaa maailmanlaajuista läsnäoloaan syventämistä. Vuoden 10 kehityksen jälkeen YOSO on tullut integroituksi kaupalliseksi teollisuusplatformiksi mekaanisen siirtimen alalla. sillä on oma brändinsä ja kansainväliset patentit. Jingpeng on noussut yrityksen tyyleen, joka korostaa "brändiä yhtä hyvin kuin palvelun laatua" jo alusta alkaen. YOSO on brändi, joka mahdollistaa meille osallistumisen kansainvälisiin messuihin, jotka esittelevät teollisuutta vuosittain. Laatu on YOSOn kestävän kasvun ytimessä. Palvelu tekee asiakkaistamme liikekumppaneiksi. Jingpeng Machinery on muuttunut johtavaksi hankintaplatformiksi teollisuuden 4.0 mekaanisten siirtimien alalla. luottamus perustuu 10 vuoteen tuotannon ilman virheitä, 190 insinöörin joukkoon, jotka harjoittavat 24 tuotantorivillä sekä 50 000 neliömetrin tuotantoalueella. Jokaisen mekaanisen siirtimen tarvitsee kymmeniä huolellisesti valittuja tuotantoprosesseja. YOSO sitoutuu tuottamaan täydellisiä tuotteita. Monipuolinen tuotearvio YOSO, tarjoaa kokonaisvaltaisen ohjaus- ja siirtokomponenttien yhdestään palvelun, jotka täyttävät asiakkaiden vaatimukset. Olemme sitoutuneet auttamaan asiakkaita olemaan kilpailukykyisempiä markkinoilla tarjoamalla teknisiä ratkaisuja, tehtaankapasiteettia ja markkinointia sekä vahvistamalla brändin arvoja ja tuotteen laadun. Tarjoamme tuoterivin, jolla on laaja valikoima suurta suorituskykyä, mikä on ansainnut luottamuksen markkinoilla kiinteän ymmärryksen ansiosta asiakkaiden tarpeista. Kumppanuudet maailman ympäri ovat perustaneet BK25 BF25 -suhteet YOSOn kanssa, ja YOSOn kansainvälistymisstrategia johtaa asiakkaisiin alueellisten verkostojen kautta. Jos haluaisit osallistua, ota yhteyttä minuun! Merkki: 10 vuotta kansainvälistä messuosaantia, laatu ytimessä kestävän kehityksen palvelussa. Asiakkaat kumppanina, välitysratkaisut. YOSO koulutetut ammattilaiset ovat kykeneviä analysoimaan asiakkaan BK25 BF25 vaatimuksia ja käyttämään 3D-valmiusmallien tuotantojärjestelyissä. Teollisuuden vaihto. YOSO arvostaa jokaista teollisuuden tapahtumaa, jota se tunnetaan maailmanlaajuisesti ja aktiivisesti osallistuu harjoittajiin keskusteluissa sekä etukäteen suuntautuneessa yrittäjyydessä johtavien yritysten kanssa, mikä on tärkeää kasvumme kannalta. Kaikki mitä heidän täytyy tehdä on rekisteröityä tiliin alustalla ja mainostaa yritystä, joka haluaa käyttää BK25 BF25 ominaisuutta. KIINNITÄMÄN heille, joita he haluaisivat myös näyttää kampanjansa, mikä budjettisuunnitelma heillä on käyttämällä todellista määrää ihmisiä ennen heitä. Yritykset huomaavat, miten kampanja etenee suoraan sen jälkeen, kun se käynnistyy, ja voivat tehdä muutoksia tarvittaessa. Ikkunat, jotka ovat käyttäneet sitä ennen, väittävät, että BK25 BF25 voidaan ylpeänä lisätä asiakastietolistaan, tämä on varmasti huippu. Tämä on todella yksinkertainen alusta, jolla on myös asiakaspalvelun tukea korjataksesi mitkä tahansa ilmiöt, joita löydät. Lisäksi palvelu tarjoaa opetusohjelmia ja useita verkkoseminaareja, jotka on suunniteltu auttamaan yrityksiä saamaan parhaan hyödyn markkinointikampanjoistaan. Enemmän laatua markkinoinnissa - BK25 BF25 on luotu siirtymällä läpi huolellisen prosessin, joka käytetään laadukkaiden markkinointikampanjoiden mukaisten organisaatioiden edistämiseksi. Jep! Alustalla on saatavilla monia erilaisia markkinointivälineitä ja resursseja, jotka on suunniteltu auttamaan optimoimaan digitaalisia markkinointipyrkimyksiään.
Copyright © Jingpeng Machinery&Equipment(Shanghai) Co.,Ltd Kaikki oikeudet pidätetään
BK25 BF25
Hyödyt:
Uudistus:
Turvallisuus:
Käyttö:
Why choose Jingpeng BK25 BF25?
YOSO tarjoaa kilpailukykyisempiä tuotteita
YOSO yrityksen profiili
Paras kumppani suorassa liikkeessä
Industrie 4.0 paras alusta
Kuinka käyttää:
Palvelu:
Laatu:
Et löydä etsimääsi?
Pyydä tarjous nyt
Ota yhteyttä konsultteihimme saatavilla olevista tuotteista