Untitled

 avatar
unknown
plain_text
a month ago
2.3 kB
7
Indexable
<script>
(function() {
  var WINDOWS = [
    { key: "ft7",  field: "utm_content_ft7",  days: 7  },
    { key: "ft14", field: "utm_content_ft14", days: 14 },
    { key: "ft30", field: "utm_content_ft30", days: 30 },
  ];

  function getUtms() {
    var params = new URLSearchParams(window.location.search);
    return {
      utm_source:   params.get("utm_source")   || "",
      utm_medium:   params.get("utm_medium")   || "",
      utm_campaign: params.get("utm_campaign") || "",
      utm_content:  params.get("utm_content")  || "",
      utm_term:     params.get("utm_term")     || "",
    };
  }

  var utms = getUtms();
  var hasUtms = Object.values(utms).some(function(v) { return v !== ""; });
  var now = Date.now();

  if (hasUtms) {
    // Last Touch: immer überschreiben
    localStorage.setItem("lt_utms", JSON.stringify({ utms: utms, ts: now }));

    // First Touch Windows: nur setzen wenn abgelaufen oder leer
    WINDOWS.forEach(function(w) {
      var stored = JSON.parse(localStorage.getItem("ft_" + w.key) || "null");
      var expired = !stored || (now - stored.ts) > w.days * 86400000;
      if (expired) {
        localStorage.setItem("ft_" + w.key, JSON.stringify({ utms: utms, ts: now }));
      }
    });
  }

  // HubSpot Form: Felder befüllen
  window.addEventListener("message", function(event) {
    if (event.data.type === "hsFormCallback" && event.data.eventName === "onFormReady") {

      // Standard UTM Felder (Last Touch)
      var lt = JSON.parse(localStorage.getItem("lt_utms") || "null");
      if (lt) {
        ["utm_source","utm_medium","utm_campaign","utm_content","utm_term"].forEach(function(name) {
          setField(name, lt.utms[name] || "");
        });
      }

      // First Touch Windows
      WINDOWS.forEach(function(w) {
        var stored = JSON.parse(localStorage.getItem("ft_" + w.key) || "null");
        if (stored) {
          setField(w.field, stored.utms.utm_content || "");
        }
      });
    }
  });

  function setField(name, value) {
    if (!value) return;
    var input = document.querySelector('input[name="' + name + '"]');
    if (input) {
      input.value = value;
      input.dispatchEvent(new Event("input", { bubbles: true }));
      input.dispatchEvent(new Event("change", { bubbles: true }));
    }
  }
})();
</script>
Editor is loading...
Leave a Comment