This page contains the complete ad configuration
This code should be placed in the head of your page
<link rel="preconnect" href="https://securepubads.g.doubleclick.net" crossorigin="anonymous">
<link rel="preconnect" href="[[domain]]" crossorigin="anonymous">
<!-- sourcepoint CMP (required) -->
<script>
!function () { var e = function () { var e, t = "__tcfapiLocator", a = [], n = window; for (; n;) { try { if (n.frames[t]) { e = n; break } } catch (e) { } if (n === window.top) break; n = n.parent } e || (!function e() { var a = n.document, r = !!n.frames[t]; if (!r) if (a.body) { var i = a.createElement("iframe"); i.style.cssText = "display:none", i.name = t, a.body.appendChild(i) } else setTimeout(e, 5); return !r }(), n.__tcfapi = function () { for (var e, t = arguments.length, n = new Array(t), r = 0; r < t; r++)n[r] = arguments[r]; if (!n.length) return a; if ("setGdprApplies" === n[0]) n.length > 3 && 2 === parseInt(n[1], 10) && "boolean" == typeof n[3] && (e = n[3], "function" == typeof n[2] && n[2]("set", !0)); else if ("ping" === n[0]) { var i = { gdprApplies: e, cmpLoaded: !1, cmpStatus: "stub" }; "function" == typeof n[2] && n[2](i) } else a.push(n) }, n.addEventListener("message", (function (e) { var t = "string" == typeof e.data, a = {}; try { a = t ? JSON.parse(e.data) : e.data } catch (e) { } var n = a.__tcfapiCall; n && window.__tcfapi(n.command, n.version, (function (a, r) { var i = { __tcfapiReturn: { returnValue: a, success: r, callId: n.callId } }; t && (i = JSON.stringify(i)), e.source.postMessage(i, "*") }), n.parameter) }), !1)) }; "undefined" != typeof module ? module.exports = e : e() }();
</script>
<script>
window._sp_ = {
config: {
accountId: 270,
baseEndpoint: 'https://consent.lovelybooks.de',
isSPA: true
}
}
</script>
<script async src="https://consent.lovelybooks.de/wrapperMessagingWithoutDetection.js" onload="window._sp_.executeMessaging()"></script>
<!-- your ad tag -->
<script async="async" src="[[domain]]moli_6cb7fc06e97399c1c974.js"></script>
You can find more information about the configuration of the tag in our Api Docs.
The initial page should contain this javascript code to request ads for the first page view.
<script>
// initialize the command queue
window.moli = window.moli || { que: [] };
window.moli.que.push(function(moliAdTag) {
// fire events to load slots
moliAdTag.afterRequestAds(function () {
var fireAdTriggerEvent = function(eventName) {
console.log('dispatching event', eventName);
window.dispatchEvent(new Event(eventName));
};
// ads are loaded and events are fired!
fireAdTriggerEvent('ads.h5v_marginal_top');
fireAdTriggerEvent('ads.h5v_content_rezi_1');
fireAdTriggerEvent('ads.h5v_content_rezi_2');
fireAdTriggerEvent('ads.h5v_sticky_1');
fireAdTriggerEvent('ads.h5v_sticky_bottom');
fireAdTriggerEvent('ads.h5v_content_top');
fireAdTriggerEvent('ads.h5v_content_row_1');
fireAdTriggerEvent('ads.h5v_content_row_2');
fireAdTriggerEvent('ads.LB_Bestseller_Buch_dfp');
fireAdTriggerEvent('ads.LB_Bestseller_Ausgeloggte_Home_dfp');
fireAdTriggerEvent('ads.LB_Bestseller_Autor_dfp');
fireAdTriggerEvent('ads.LB_Bestseller_Genre_dfp');
fireAdTriggerEvent('ads.LB_Bestseller_Listen_mobil');
fireAdTriggerEvent('ads.LB_Bestseller_Reihe_dfp');
fireAdTriggerEvent('ads.LB_Leserpreis_Subnavi_dfp'));
});
// trigger ads
moliAdTag.requestAds();
});
</script>
This snippet needs to be executed each time the user navigates to a new page.
<script>
// initialize the command queue
window.moli = window.moli || { que: [] };
window.moli.que.push(function(moliAdTag) {
// refresh ads
moliAdTag.requestAds();
});
</script>
The sourcepoint script supports single page applications with the
isSPA: true
parameter.
This adds a new function to the global sourcepoint object
window._sp_.executeMessaging()
This method must be triggered
<script async src="https://consent.lovelybooks.de/wrapperMessagingWithoutDetection.js" onload="window._sp_.executeMessaging()"></script>
TCF 2 and german law require the privacy settings to be accessible at all times. A clean way to do this is to add a link into the footer that opens the privacy manager.
<a href="#" onclick="window._sp_.loadPrivacyManagerModal(186157);">Privatsphäre></a>
Additionally to sourcepoint scripts integrated in the head of your page, place this button on your privacy page to open the privacy manager
<button type="button" onclick="window._sp_.loadPrivacyManagerModal(186157);">Datenschutz Einstellungen öffnen></button>
You can get more details by opening the moli console.
enable ad tag console logs enable prebid console logs enable test modeOr if you are developer type this into the javascript console
moli.openConsole()
window.dispatchEvent(new Event('ads.h5v_marginal_top'))
window.dispatchEvent(new Event('ads.h5v_content_rezi_1'))
window.dispatchEvent(new Event('ads.h5v_content_rezi_2'))
window.dispatchEvent(new Event('ads.h5v_sticky_1'))
window.dispatchEvent(new Event('ads.h5v_sticky_bottom'))
window.dispatchEvent(new Event('ads.h5v_content_top'))
window.dispatchEvent(new Event('ads.h5v_content_row_1'))
window.dispatchEvent(new Event('ads.h5v_content_row_2'))
window.dispatchEvent(new Event('ads.LB_Bestseller_Buch_dfp'))
window.dispatchEvent(new Event('ads.LB_Bestseller_Ausgeloggte_Home_dfp'))
window.dispatchEvent(new Event('ads.LB_Bestseller_Autor_dfp'))
window.dispatchEvent(new Event('ads.LB_Bestseller_Genre_dfp'))
window.dispatchEvent(new Event('ads.LB_Bestseller_Listen_mobil'))
window.dispatchEvent(new Event('ads.LB_Bestseller_Reihe_dfp'))
window.dispatchEvent(new Event('ads.LB_Leserpreis_Subnavi_dfp'))
window.dispatchEvent(new Event('ads.LB_Bestseller_Liste_Detail_dfp'))
window.dispatchEvent(new Event('ads.LB_Bestseller_Liste_Alle_dfp'))
window.dispatchEvent(new Event('ads.LB_Bestseller_Liste_Kategorie_dfp'))