', { status: 200, headers: { 'Content-Type': 'text/html; charset=utf-8' } })); } if (/\/cart\.js$/.test(u.pathname)) { if (cartP && Date.now() - cartT < 3000) { return cartP.then(function (r) { return r.clone(); }); } cartT = Date.now(); var p = F.apply(w, arguments).then(function (r) { if (!r.ok) { cartP = null; } return r; }, function (e) { cartP = null; throw e; }); cartP = p; return p.then(function (r) { return r.clone(); }); } } } } catch (e) {} return F.apply(w, arguments); }; try { var xo = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function (method, url) { try { if (String(method).toUpperCase() !== 'GET' && MUT.test(urlOf(url).pathname)) { markMutated(); } } catch (e) {} return xo.apply(this, arguments); }; } catch (e) {} ['planet:smart-cart:add', 'planet:smart-cart:change', 'cart:change', 'cart:refresh'].forEach(function (ev) { w.addEventListener(ev, markMutated); d.addEventListener(ev, markMutated); }); } /* ---------- 3. Fremd-Apps spaeter laden ---------- */ var path = loc.pathname; var isLoyalty = /\/pages\/4d-insider-club/.test(path); var isCartOrAccount = /\/(cart|account)(\/|$)/.test(path); var pats = [/\/\/widgets\.trustedshops\.com\/js\//]; /* BON: auf Insider-Club-, Warenkorb- und Kontoseiten sofort laden (dort Hauptinhalt) */ if (!isLoyalty && !isCartOrAccount) { pats.push(/\/\/storefront\.bonloyalty\.com\/app\/bon-loyalty\.js/); } /* UpPromote: bei Affiliate-Links sofort laden, damit die Zuordnung sicher sitzt */ if (!/[?&](sca_ref|sca_crp|sca_source|_upl|redirect_url)=/.test(loc.search)) { pats.push(/\/affliate-by-secomapp-[^\/]+\/assets\/(core\.min|customer-referral)\.js/); } var BLOCK = 'text/4d-spaeter'; var queue = [{ src: 'https://widget.superchat.de/snippet.js?applicationKey=WClo1RPmY7wBYgw09deMpGQDL3', attrs: { referrerpolicy: 'no-referrer-when-downgrade' } }]; var released = false; var matches = function (src) { for (var i = 0; i < pats.length; i++) { if (pats[i].test(src)) { return true; } } return false; }; var hold = function (n) { if (released || n.nodeType !== 1 || n.tagName !== 'SCRIPT' || !n.src || n.type === BLOCK || !matches(n.src)) { return; } var attrs = {}; for (var i = 0; i < n.attributes.length; i++) { var a = n.attributes[i]; if (a.name !== 'type' && a.name !== 'src') { attrs[a.name] = a.value; } } queue.push({ src: n.src, type: n.getAttribute('type'), attrs: attrs, el: n }); n.type = BLOCK; n.addEventListener('beforescriptexecute', function (e) { if (n.type === BLOCK) { e.preventDefault(); } }); }; var mo = new MutationObserver(function (ms) { for (var i = 0; i < ms.length; i++) { var a = ms[i].addedNodes; for (var j = 0; j < a.length; j++) { hold(a[j]); } } }); mo.observe(d.documentElement, { childList: true, subtree: true }); var oD = d.addEventListener, oW = w.addEventListener, pD = null, pW = null; /* Spaet geladene Skripte warten evtl. auf DOMContentLoaded/load, das schon vorbei ist -> sofort nachreichen */ var wrap = function (orig, target) { return function (type, fn) { var r = orig.apply(this, arguments); if (this === target && fn && ((type === 'DOMContentLoaded' && d.readyState !== 'loading') || (type === 'load' && target === w && d.readyState === 'complete'))) { setTimeout(function () { try { var ev = new Event(type); if (typeof fn === 'function') { fn.call(target, ev); } else if (fn.handleEvent) { fn.handleEvent(ev); } } catch (e) { console.error(e); } }, 0); } return r; }; }; var unpatch = function () { if (pD && d.addEventListener === pD) { delete d.addEventListener; } if (pW && w.addEventListener === pW) { delete w.addEventListener; } pD = pW = null; }; /* Echte Nutzer-Interaktion: Mausrad/Touch/Klick/Taste decken auch jedes Scrollen ab. Kein 'scroll'-Ereignis, weil Karussells beim Aufbau selbst scrollen und das sonst sofort ausloesen wuerde. */ var TRIG = ['wheel', 'touchstart', 'pointerdown', 'keydown']; var run = function () { mo.disconnect(); pD = d.addEventListener = wrap(oD, d); pW = w.addEventListener = wrap(oW, w); var pending = 0; var finish = function () { if (--pending <= 0) { setTimeout(unpatch, 1500); } }; queue.forEach(function (o) { var s = d.createElement('script'); for (var k in o.attrs) { if (Object.prototype.hasOwnProperty.call(o.attrs, k)) { try { s.setAttribute(k, o.attrs[k]); } catch (e) {} } } if (o.type && o.type !== BLOCK) { s.type = o.type; } s.async = false; s.onload = s.onerror = finish; s.src = o.src; pending++; if (o.el && o.el.parentNode) { o.el.parentNode.insertBefore(s, o.el.nextSibling); o.el.parentNode.removeChild(o.el); } else { (d.body || d.head).appendChild(s); } }); if (!pending) { unpatch(); } setTimeout(unpatch, 15000); }; var release = function (e) { if (released || (e && e.type && e.isTrusted === false)) { return; } released = true; TRIG.forEach(function (e) { w.removeEventListener(e, release, true); }); if (d.readyState === 'loading') { oD.call(d, 'DOMContentLoaded', run); } else { run(); } }; TRIG.forEach(function (e) { oW.call(w, e, release, { passive: true, capture: true }); }); oW.call(w, 'load', function () { setTimeout(function () { if (w.requestIdleCallback) { requestIdleCallback(release, { timeout: 1000 }); } else { release(); } }, 3000); }); setTimeout(release, 9000); w.__4dSpeed = { release: release, queue: queue }; })(); Skip to content

Cart

Your cart is empty