|
<!doctype html><html lang="de"> |
|
<head> |
|
<title>DEMO: iFrame + Messages (Inner)</title> |
|
<style> |
|
body {font-family:arial;color:#fff;line-height:1.4em;background:#222;text-align:center} |
|
#cnt {position: relative; max-width:1000px; margin: 10px auto; text-align:left; padding:1em} |
|
a, h1, h2, h3, h4 {color:#ffa072; line-height:1em} |
|
input[type="button"], button {padding:10px 20px; border:0;color:#fff;background:#1c8e1c;font-size:1.1em;border-radius:8px} |
|
input[type="button"]:hover, button:hover {cursor:pointer; background:#20a520} |
|
input {padding:3px;} fieldset{border:0} |
|
input[type="text"]{width:25em; max-width:100%; border:1px solid #666; border-radius:4px; padding:5px; margin:0.2em 0 0.4em 0;} |
|
</style> |
|
</head> |
|
<body> |
|
<div id="cnt"> |
|
|
|
<span id="ue1"><h1>Testseite - iFrame Messages DEMO</h1></span> |
|
<p id="infotxt">Wir sind hier im inneren iFrame.</p> |
|
<p>Hier können Events ausgelöst und als Message an den Parent gesendet werden.</p> |
|
|
|
<h3>Einfache Events senden</h3> |
|
<p>Eventname ist "orderSuccess", es gibt keine weitere Nutzlast</p> |
|
<input type="button" onclick="sendToParent('orderSuccess')" value='"orderSuccess" senden' /> |
|
|
|
<p>Oder: Beliebige Zeichenkette als Eventnamen oder gültigen JSON String eingeben und versenden mit Button.</p> |
|
|
|
<b>String / Nutzlast</b><br> |
|
<input id="evname" type="text" value="testPayload 123" /> |
|
<input type="button" onclick="sendToParent(document.getElementById('evname').value)" value="Senden" /> |
|
|
|
<h3>JSON Objekt senden</h3> |
|
<p>Mit diesem Button wird ein Beispiel JSON Objekt erstellt und versendet. Es sieht so aus: </p> |
|
<pre> |
|
{ |
|
event:"JSON DEMO event", |
|
params: { |
|
step: 1, |
|
value: 50, |
|
title: "Ein Beispiel String" |
|
} |
|
} |
|
</pre> |
|
<input type="button" onclick="sendJSONDemo()" value="JSON senden" /> |
|
|
|
<h3>GA4 Purchase</h3> |
|
<p>Eine GA4-Kaufabschluss Beispiel-Nutzlast aus der |
|
<a href="https://developers.google.com/analytics/devguides/collection/ga4/ecommerce?client_type=gtm#make_a_purchase_or_issue_a_refund"> |
|
Google Hilfe</a> senden:</p> |
|
<input type="button" onclick="sendGa4Purchase()" value="GA4 Purchase senden" /> |
|
|
|
</div> <!--cnt --> |
|
|
|
<script> |
|
|
|
//"Kernfunktion" zur Weitergabe beliebiger Nachrichten an den Parent mit einer |
|
//eindeutigen Kennzeichnung als "iFrameTrackingMessage" in einer hier frei gewählten |
|
//Objektstruktur mit "type" und "payload" als Schlüsseln. Der Empfänger muss das |
|
//Format also kennen und entsprechend auslesen |
|
function sendToParent(msg) { |
|
if (!msg) return; |
|
var payload = {type: "iFrameTrackingMessage", payload: msg}; |
|
window.parent.postMessage(payload, '*'); |
|
console.log("%cINNER: %cNachricht versendet.", |
|
"font-weight:bold;color:green", "", msg); |
|
|
|
} |
|
|
|
/****************************/ |
|
|
|
//exemplarische Erkennung, ob im iFrame: |
|
var isInFrame = true; |
|
try { |
|
isInFrame = window.self !== window.top; |
|
} catch (e) { |
|
console.warn("INNER: Status unklar"); |
|
} |
|
if (!isInFrame) { |
|
console.warn("INNER: nicht in iFrame"); |
|
|
|
document.getElementById("infotxt").innerHTML = |
|
"<strong style='color:red'>Achtung: </strong> "+ |
|
"diese Seite wurde nicht in einem iFrame geladen."; |
|
} else { |
|
document.getElementById("ue1").innerHTML = |
|
"<h2>Beispiel iFrame Content</h2>"; |
|
//Aufruf im iFrame als Beispiel-Event "process_step_1" senden: |
|
sendToParent("process_step_1"); |
|
} |
|
|
|
/****************************/ |
|
|
|
//Beispiel: Senden eines beliebigen JSON codierten Events mit Parametern |
|
//als "params", die beim Empfänger ausgelesen werden können |
|
function sendJSONDemo() { |
|
sendToParent(JSON.stringify({ |
|
event:"JSON DEMO event", |
|
params: { |
|
step: 1, |
|
value: 50, |
|
title: "Ein Beispiel String" |
|
} |
|
})); |
|
} |
|
|
|
//Beispiel: EEC Event als Objekt ohne Serialisierung als JSON |
|
function sendGa4Purchase() { |
|
sendToParent({ |
|
event: "purchase", |
|
ecommerce: { |
|
transaction_id: (Math.round(Math.random()*1000)).toString(), |
|
affiliation: "Google Merchandise Store", |
|
value: 25.42, |
|
tax: 4.90, |
|
shipping: 5.99, |
|
currency: "USD", |
|
coupon: "SUMMER_SALE", |
|
items: [ |
|
{ |
|
item_id: "SKU_12345", |
|
item_name: "Stan and Friends Tee", |
|
affiliation: "Google Merchandise Store", |
|
coupon: "SUMMER_FUN", |
|
discount: 2.22, |
|
index: 0, |
|
item_brand: "Google", |
|
item_category: "Apparel", |
|
item_category2: "Adult", |
|
item_category3: "Shirts", |
|
item_category4: "Crew", |
|
item_category5: "Short sleeve", |
|
item_list_id: "related_products", |
|
item_list_name: "Related Products", |
|
item_variant: "green", |
|
location_id: "ChIJIQBpAG2ahYAR_6128GcTUEo", |
|
price: 9.99, |
|
quantity: 1 |
|
}, |
|
{ |
|
item_id: "SKU_12346", |
|
item_name: "Google Grey Women's Tee", |
|
affiliation: "Google Merchandise Store", |
|
coupon: "SUMMER_FUN", |
|
discount: 3.33, |
|
index: 1, |
|
item_brand: "Google", |
|
item_category: "Apparel", |
|
item_category2: "Adult", |
|
item_category3: "Shirts", |
|
item_category4: "Crew", |
|
item_category5: "Short sleeve", |
|
item_list_id: "related_products", |
|
item_list_name: "Related Products", |
|
item_variant: "gray", |
|
location_id: "ChIJIQBpAG2ahYAR_6128GcTUEo", |
|
price: 20.99, |
|
promotion_id: "P_12345", |
|
promotion_name: "Summer Sale", |
|
quantity: 1 |
|
}] |
|
} |
|
}); |
|
} |
|
|
|
</script> |
|
|
|
</body> |
|
</html> |
Wer Bewegtbild mag, findet dazu auch ein Video unter https://www.youtube.com/watch?v=5BuijXlQGlw