produkter er avgjørende for å sikre produktsikkerhet, kvalitet og holdbarhet. Som B2B-kjøper kan du ha ...">
,需要通过父级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 || nodeText || '');
if (phoneReg.test(str) && numUseReg.test(str)) {
window.postMessage({
type: 'SHOPS_CONTACT_TRACK',
data: {
phone: nodeText,
},
}, '*');
_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;
if (phoneReg.test(fatherText) && numUseReg.test(fatherText)) {
window.postMessage({
type: 'SHOPS_CONTACT_TRACK',
data: {
phone: nodeText,
},
}, '*');
_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)) {
window.postMessage({
type: 'SHOPS_CONTACT_TRACK',
data: {
email: 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')) {
window.postMessage({
type: 'SHOPS_CONTACT_TRACK',
data: {
email: content,
},
}, '*');
_paq.push(['trackEvent', 'click', 'email', content]);
return;
}
}
var nodeChildList = node.childNodes;
for (var i = 0; i < nodeChildList.length; i++) {
if (nodeChildList[i].nodeType !== 3) continue;
var val = nodeChildList[i].textContent.replace(/\s?:?/g, '');
if (!limitRegLength(val)) continue;
if (emailReg.test(val)) {
window.postMessage({
type: 'SHOPS_CONTACT_TRACK',
data: {
email: val,
},
}, '*');
_paq.push(['trackEvent', 'click', 'email', val]);
return;
}
}
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)) {
window.postMessage({
type: 'SHOPS_CONTACT_TRACK',
data: {
email: 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();
return;
}
/** 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();
return;
}
/** 向上查找父节点 */
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');
if (!target) return;
// 回调函数
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);
}
});
})();
Valget av emballasjemateriale for mat og Produkter er avgjørende for å sikre produktets sikkerhet, kvalitet og holdbarhet. Som B2B-kjøper kan du ha bekymringer angående materialers egnethet, overholdelse av mattrygghetsregelverk og miljøpåvirkningen av dine emballasjevalg. Denne artikkelen gir deg viktige opplysninger for å vurdere miljøvennlige matemballasjematerialer, med fokus på deres spesifikasjoner, kvalitet, leverandørens pålitelighet, kostnadsfaktorer og vanlige utfordringer. Når man velger emballasjemateriale til mat, må flere viktige faktorer tas i betraktning for å sikre at emballasjen oppfyller både sikkerhets- og funksjonskravene. For det første må materialet være i samsvar med gjeldende mattrygghetsregelverk, som for eksempel FDA- eller EU-standarder, avhengig av ditt marked. Denne overholdelsen sikrer at materialet er trygt for direkte kontakt med mat og ikke avgir skadelige stoffer til maten. I tillegg er barriereegenskapene til emballasjematerialet avgjørende. For eksempel er materialer med høy fukt- og oksygensperre avgjørende for produkter som krever lang holdbarhet. Miljøvennlige alternativer, som Shunho Creative sin TransMet-papir med aluminiumslag, gir utmerkede barriereegenskaper samtidig som det er resirkulerbart og nedbrytbart. Tilpassing er en annen viktig faktor. Ulike matvarianter kan kreve spesifikke emballasjeløsninger. For eksempel kan sure matvarer kreve materialer som tåler korrosjon, mens frosne produkter krever materialer som tåler lave temperaturer uten å miste integritet. Å vurdere kvaliteten på matemballasjematerialer innebærer å undersøke flere tekniske spesifikasjoner. Viktige spesifikasjoner inkluderer tykkelse, strekkstyrke og forseglingsegenskaper. Disse egenskapene påvirker hvor godt emballasjen vil fungere under fylling, frakt og lagring. Tykkelse Et tykkere materiale kan gi bedre beskyttelse, men det kan også øke vekten og kostnadene. Vurder avveiningen mellom beskyttelse og kostnadseffektivitet basert på produktets behov. Strekkstyrke Dette refererer til materialets evne til å tåle strekk. Sterkere materialer reduserer risikoen for revner eller brudd under håndtering og transport, noe som er avgjørende for mattrygghet. Sealing-egenskaper Sørg for at materialet kan forsegles effektivt for å forhindre forurensning og ødelæggelse. En god forsegling forlenger også produktets holdbarhet. Kvalitetstester, som sprengningstester og tester av fuktighetstapshastighet (MVTR), kan hjelpe til å bekrefte at materialet oppfyller dine spesifikke krav. Å finne en pålitelig leverandør av matpakkmaterialer er avgjørende for å opprettholde kvalitetsstandarder og sikre tidsnemlig levering. Start med å vurdere potensielle leverandører basert på deres sertifiseringer, produksjonskapasitet og erfaring innen matpakking. Søk etter leverandører med etablerte kvalitetskontrollprosesser, inkludert regelmessige revisjoner og produkttester. Leverandører som Shunho Creative, kjent for sine miljøvennlige løsninger og avanserte produksjonsteknikker, kan levere den nødvendige påliteligheten og konsekvensen i produktkvaliteten. I tillegg bør du vurdere leverandører som tilbyr tilpassede løsninger. En leverandør som forstår dine spesifikke behov, kan levere skreddersydde løsninger som forbedrer produktets markedsføringsevne, samtidig som sikkerhet og etterlevelse av regelverk sikres. Kostnadene for matpakkmateriell kan variere betydelig avhengig av flere faktorer, blant annet materialetype, bestillingsvolum og krav til tilpasning. Generelt fører kjøp i større mengder til lavere kostnader per enhet, men det er viktig å ta hensyn til totalkostnaden, som inkluderer frakt, lagring og eventuell sløsing på grunn av forgiftning eller skade. Tilpassede løsninger kan, selv om de er nyttige, også føre til høyere kostnader. Diskuter dine spesifikke behov med leverandørene for å finne en balanse mellom funksjonalitet og budsjett. For eksempel kan miljøvennlige materialer som Shunho sin TransMet-papir ha en høyere innledende kostnad, men gi langsiktige besparelser gjennom reduserte avfallsbehandlingskostnader og økt merkeverdi på grunn av bærekraft. I tillegg kan levertider påvirke kostnadene. Sørg for å ta med produksjons- og fraktidene i beregningene når du planlegger lagerbeholdningen din. En pålitelig leverandør vil gi deg klare tidsfrister og informere om eventuelle prisendringer som følge av markedskondisjoner. Erfaring med holografisk papir i internasjonal handel i mer enn 20 år. Laserpapir har en produksjonskapasitet på opptil 200 000 tonn hvert år. Støtte for engelsk, spansk og japansk er tilgjengelig for holografiske papirstikker. Med holografiske papirstikker: REACH, FDA 21 CFR 176.170, (EU) nr. 10/2011, TÜV OK COMPOST HOME, gjenvinnbar, ISO 9001/14001/45001, CNAS, PATENTER og andre miljøsertifikater Regnbueinnpapir – majoriteten av kundene er fra verdens mest prestisjefulle 500 selskaper Når kjøpere velger emballasjematerialer til mat, bør de være oppmerksomme på vanlige utfordringer som kan oppstå under produksjonen og distributionsprosessene. Materiell samstemmigheit Noen materialer kan reagere ugunstig med bestemte matvarertyper, noe som kan føre til forurensning. Bekreft alltid kompatibiliteten ut fra matvarens kjemiske egenskaper. For eksempel bør sure produkter pakkes i materialer som er motstandsdyktige mot korrosjon. Tetthet Dårlig sealing kan føre til råtnet mat og forurensning. Sørg for at materialene dine testes for seal-styrke, og vurder bruk av avanserte sealing-teknologier for å øke påliteligheten. Miljøpåvirkning Kjøpere er i økende grad opptatt av miljøpåvirkningen fra emballasjematerialer. Å velge gjenvinnbare og nedbrytbare alternativer, som Shunho Creative sin TransMet-papir, kan redusere denne bekymringen og samtidig tiltrekke seg miljøbevisste forbrukere. Forsyningskjedestruksjoner Forsinkelser i leveringskjeden kan føre til lagermangler. Å etablere et godt forhold til leverandøren din og ha beredskapsplaner – for eksempel alternative materialer eller leverandører – kan hjelpe til å redusere denne risikoen. Ved å håndtere disse vanlige problemene proaktivt kan du sikre en jevnere innkjøpsprosess og opprettholde kvaliteten og sikkerheten til matvarene dine. å velge riktig emballasjemateriale for mat og TransMet® Silver krever nøye vurdering av ulike faktorer, inkludert materialegenskaper, leverandørens pålitelighet og kostnadshåndtering. Ved å bruke miljøvennlige alternativer og forstå de tekniske kravene kan du forbedre både produktsikkerheten og markedsattraksjonen. Pakkmateriale for mat
Viktige overveigelser
Hvordan vurdere kvaliteten på matpakkmateriale
Pålitelige leverandører av matpakkmateriale
Kostnadsfaktorer ved større bestillinger av matpakkmateriale
Why choose Shunho
Pakkmateriale for mat?
Selskapets styrke
Utmerket team
Kvalitetssertifikat
Kunde styrke
Vanlige problemer med matpakkmateriale og løsninger
Finner du ikke det du leter etter?
Be om et tilbud nå
Kontakt konsulentene våre for mer informasjon om tilgjengelige produkter.Ta kontakt