1(function () { 2 if (window.__SEMARCHY_PARENT_TRACKING_V7__) return; 3 window.__SEMARCHY_PARENT_TRACKING_V7__ = true; 4 5 const PH_KEY = "phc_bbCqHaMYWguVqa1V99L0ZzLsgiaE7EyeUDr8iORbeeU"; 6 const API_HOST = "https://eu.i.posthog.com"; 7 8 const CONSENT_COOKIE = "ph_analytics_consent"; 9 const IFRAME_ORIGIN = "https://go.semarchy.com"; 10 const IFRAME_MATCH = "go.semarchy.com"; 11 const PARENT_ORIGIN = window.location.origin; 12 13 const UTM_KEYS = ["utm_source", "utm_medium", "utm_campaign", "utm_term", "utm_content"]; 14 15 const EXTRA_TRACKING_KEYS = [ 16 "kw_matchtype", 17 "gtm_network", 18 "gtm_placement", 19 "gtm_groupid", 20 "gtm_accid", 21 "gad_source", 22 "gad_campaignid" 23 ]; 24 25 function getExtraTrackingParamsFromURL() { 26 const p = new URLSearchParams(window.location.search); 27 const params = {}; 28 29 EXTRA_TRACKING_KEYS.forEach((k) => { 30 const v = p.get(k); 31 if (v && String(v).trim()) { 32 params[k] = String(v).trim(); 33 } 34 }); 35 36 return params; 37 } 38 39 function persistExtraTrackingParams() { 40 const params = getExtraTrackingParamsFromURL(); 41 42 if (Object.keys(params).length) { 43 writeSession( 44 STORAGE_KEYS.EXTRA_TRACKING_PARAMS, 45 params 46 ); 47 } 48 49 return readSession( 50 STORAGE_KEYS.EXTRA_TRACKING_PARAMS, 51 {} 52 ); 53 } 54 55 const STORAGE_KEYS = { 56 SESSION_START: "sem_first_form_session_start_v1", 57 INITIAL_CONTEXT: "sem_first_form_initial_context_v1", 58 INITIAL_UTMS: "sem_first_form_initial_utms_v1", 59 LAST_TOUCH_UTMS: "sem_first_form_last_touch_utms_v1", 60 EXTRA_TRACKING_PARAMS: "sem_first_form_extra_tracking_params_v1", 61 FIRST_FORM_DATA: "sem_first_form_data_v1" 62 }; 63 64 const IDENTITY_EMAIL_KEY = "sem_posthog_identity_email_v1"; 65 66 function nowIso() { 67 return new Date().toISOString(); 68 } 69 70 function safeJsonParse(value, fallback) { 71 try { return JSON.parse(value); } catch { return fallback; } 72 } 73 74 function readSession(key, fallback) { 75 try { 76 const raw = sessionStorage.getItem(key); 77 return raw ? safeJsonParse(raw, fallback) : fallback; 78 } catch { 79 return fallback; 80 } 81 } 82 83 function writeSession(key, value) { 84 try { sessionStorage.setItem(key, JSON.stringify(value)); } catch {} 85 } 86 87 function getStoredIdentityEmail() { 88 try { 89 return localStorage.getItem(IDENTITY_EMAIL_KEY) || sessionStorage.getItem(IDENTITY_EMAIL_KEY) || ""; 90 } catch { 91 return ""; 92 } 93 } 94 95 function storeIdentityEmail(email) { 96 try { 97 localStorage.setItem(IDENTITY_EMAIL_KEY, email); 98 } catch {} 99 100 try { 101 sessionStorage.setItem(IDENTITY_EMAIL_KEY, email); 102 } catch {} 103 } 104 105 function findEmailInProps(props) { 106 if (!props || typeof props !== "object") return ""; 107 108 function search(obj) { 109 if (!obj || typeof obj !== "object") return ""; 110 111 for (const key in obj) { 112 if (!Object.prototype.hasOwnProperty.call(obj, key)) continue; 113 114 const value = obj[key]; 115 116 if ( 117 typeof value === "string" && 118 /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value.trim()) 119 ) { 120 return value.trim().toLowerCase(); 121 } 122 123 if (value && typeof value === "object") { 124 const found = search(value); 125 if (found) return found; 126 } 127 } 128 129 return ""; 130 } 131 132 return search(props); 133 } 134 135function emptyUtms() { 136 return { 137 utm_source: "", 138 utm_medium: "", 139 utm_campaign: "", 140 utm_term: "", 141 utm_content: "" 142 }; 143} 144 145function getSharedTrackingProperties() { 146 const sessionUTMs = readSession( 147 STORAGE_KEYS.LAST_TOUCH_UTMS, 148 {} 149 ); 150 151 const sessionExtraTracking = readSession( 152 STORAGE_KEYS.EXTRA_TRACKING_PARAMS, 153 {} 154 ); 155 156 return { 157 ...sessionUTMs, 158 ...sessionExtraTracking 159 }; 160} 161 162 function hasAnyUTM(obj) { 163 if (!obj) return false; 164 return UTM_KEYS.some((k) => !!(obj[k] && String(obj[k]).trim())); 165 } 166 167 function normalizeTitle(str) { 168 return String(str || "").replace(/\s+/g, " ").trim(); 169 } 170 171 function getCurrentPageTitle() { 172 return normalizeTitle(document.title || ""); 173 } 174 175 function ensurePageTitle() { 176 return getCurrentPageTitle(); 177 } 178 179 function getFormNameFromPageTitle() { 180 const title = getCurrentPageTitle(); 181 if (!title) return ""; 182 return title.toLowerCase().endsWith("form") ? title : `${title} Form`; 183 } 184 185 function getUTMsFromURL() { 186 const p = new URLSearchParams(window.location.search); 187 const utms = {};
188 UTM_KEYS.forEach((k) => { 189 const v = p.get(k); 190 if (v && String(v).trim()) utms[k] = String(v).trim(); 191 }); 192 return utms; 193 } 194 195 function getCleanInitialPagePath() { 196 try { 197 return window.location.pathname + (window.location.hash || ""); 198 } catch { 199 return window.location.pathname || ""; 200 } 201 } 202 203 function getReferringDomain() { 204 try { 205 if (!document.referrer) return ""; 206 return new URL(document.referrer).hostname || ""; 207 } catch { 208 return ""; 209 } 210 } 211 212 function getConsent() { 213 const m = document.cookie.match(new RegExp("(^| )" + CONSENT_COOKIE + "=([^;]+)")); 214 return m ? decodeURIComponent(m[2]) : null; 215 } 216 217 function setConsent(value, days = 180) { 218 const d = new Date(); 219 d.setTime(d.getTime() + days * 24 * 60 * 60 * 1000); 220 document.cookie = `${CONSENT_COOKIE}=${encodeURIComponent(value)}; expires=${d.toUTCString()}; path=/; SameSite=Lax`; 221 } 222 223 function consented() { 224 return getConsent() === "yes"; 225 } 226 227 function cookieYesHasAnalytics(detail) { 228 if (!detail) return false; 229 let accepted = 230 detail.acceptedCategories || 231 detail.categories || 232 detail.accepted || 233 detail.cookieCategories || 234 []; 235 if (typeof accepted === "string") accepted = accepted.split(","); 236 if (accepted && typeof accepted === "object" && !Array.isArray(accepted)) { 237 accepted = Object.keys(accepted).filter(k => accepted[k]); 238 } 239 accepted = (accepted || []).map(v => String(v).toLowerCase().trim()); 240 return accepted.some(v => ["analytics", "statistics", "performance"].includes(v)); 241 } 242 243 function getCookieValue(name) { 244 const escaped = name.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); 245 const m = document.cookie.match(new RegExp("(^|;\\s*)" + escaped + "=([^;]*)")); 246 return m ? decodeURIComponent(m[2]) : ""; 247 } 248 249 function getMarketingCloudVisitorId() { 250 return ( 251 getCookieValue("sfmc_visitor_id") || 252 getCookieValue("mc_visitor_id") || 253 getCookieValue("visitor_id") || 254 "" 255 ); 256 } 257 258 function getMarketingCloudVisitId() { 259 return ( 260 getCookieValue("sfmc_visit_id") || 261 getCookieValue("mc_visit_id") || 262 getCookieValue("visit_id") || 263 "" 264 ); 265 } 266 267 function getCurrentPostHogDistinctId() { 268 try { 269 if (!window.posthog || typeof window.posthog.get_distinct_id !== "function") return ""; 270 const id = window.posthog.get_distinct_id(); 271 return id ? String(id) : ""; 272 } catch { 273 return ""; 274 } 275 } 276 277 function isGenericFormName(value) { 278 const v = String(value || "").trim().toLowerCase(); 279 return !v || v === "pardot form" || v === "pardot-form" || v === "form"; 280 } 281 282 function isGenericFormId(value) { 283 const v = String(value || "").trim().toLowerCase(); 284 return !v || v === "pardot-form" || v === "form"; 285 } 286 287 function ensureSessionStart() { 288 let sessionStart = readSession(STORAGE_KEYS.SESSION_START, ""); 289 if (!sessionStart) { 290 sessionStart = nowIso(); 291 writeSession(STORAGE_KEYS.SESSION_START, sessionStart); 292 } 293 return sessionStart; 294 } 295 296 function ensureInitialContext() { 297 let initial = readSession(STORAGE_KEYS.INITIAL_CONTEXT, null); 298 if (!initial) { 299 initial = { 300 initial_url: window.location.href, 301 initial_page_path: getCleanInitialPagePath(), 302 referring_domain: getReferringDomain() 303 }; 304 writeSession(STORAGE_KEYS.INITIAL_CONTEXT, initial); 305 } 306 return initial; 307 } 308 309 function ensureInitialUTMs() { 310 let initialUtms = readSession(STORAGE_KEYS.INITIAL_UTMS, null); 311 if (hasAnyUTM(initialUtms)) return initialUtms; 312 313 const urlUTMs = getUTMsFromURL(); 314 if (hasAnyUTM(urlUTMs)) { 315 const next = {}; 316 UTM_KEYS.forEach((k) => { next[k] = urlUTMs[k] || ""; }); 317 writeSession(STORAGE_KEYS.INITIAL_UTMS, next); 318 return next; 319 } 320 321 return initialUtms || emptyUtms(); 322 } 323 324 function persistLastTouchUTMsIfPresent() { 325 const urlUTMs = getUTMsFromURL(); 326 if (!hasAnyUTM(urlUTMs)) { 327 return readSession(STORAGE_KEYS.LAST_TOUCH_UTMS, emptyUtms()); 328 } 329 330 const next = {};
331 UTM_KEYS.forEach((k) => { next[k] = urlUTMs[k] || ""; }); 332 writeSession(STORAGE_KEYS.LAST_TOUCH_UTMS, next); 333 return next; 334 } 335 336 function getDefaultFirstFormData() { 337 return { 338 "First Form Date/Time": "", 339 "First Form Email": "", 340 "First Form ID": "", 341 "First Form Initial Page Path": "", 342 "First Form Initial URL": "", 343 "First Form Marketing Cloud Visit ID": "", 344 "First Form Marketing Cloud Visitor ID": "", 345 "First Form Name": "", 346 "First Form PostHog Distinct ID": "", 347 "First Form Referring Domain": "", 348 "First Form Session Start": "", 349 "First Form UTM Campaign": "", 350 "First Form UTM Content": "", 351 "First Form UTM Medium": "", 352 "First Form UTM Source": "", 353 "First Form UTM Term": "" 354 }; 355 } 356 357 function readFirstFormData() { 358 return readSession(STORAGE_KEYS.FIRST_FORM_DATA, getDefaultFirstFormData()); 359 } 360 361 function writeFirstFormData(data) { 362 writeSession(STORAGE_KEYS.FIRST_FORM_DATA, data || getDefaultFirstFormData()); 363 } 364 365 function ensureFirstFormPrefill() { 366 const existing = readFirstFormData(); 367 const sessionStart = ensureSessionStart(); 368 const initial = ensureInitialContext(); 369 const initialUtms = ensureInitialUTMs(); 370 371 const next = { 372 ...getDefaultFirstFormData(), 373 ...existing 374 }; 375 376 if (!next["First Form UTM Source"]) next["First Form UTM Source"] = initialUtms.utm_source || ""; 377 if (!next["First Form UTM Medium"]) next["First Form UTM Medium"] = initialUtms.utm_medium || ""; 378 if (!next["First Form UTM Campaign"]) next["First Form UTM Campaign"] = initialUtms.utm_campaign || ""; 379 if (!next["First Form UTM Content"]) next["First Form UTM Content"] = initialUtms.utm_content || ""; 380 if (!next["First Form UTM Term"]) next["First Form UTM Term"] = initialUtms.utm_term || ""; 381 if (!next["First Form Session Start"]) next["First Form Session Start"] = sessionStart || ""; 382 if (!next["First Form Initial URL"]) next["First Form Initial URL"] = initial.initial_url || ""; 383 if (!next["First Form Initial Page Path"]) next["First Form Initial Page Path"] = initial.initial_page_path || ""; 384 if (!next["First Form Referring Domain"]) next["First Form Referring Domain"] = initial.referring_domain || ""; 385 if (isGenericFormName(next["First Form Name"])) next["First Form Name"] = ""; 386 if (!next["First Form Name"]) next["First Form Name"] = getFormNameFromPageTitle() || ""; 387 388 if (consented()) { 389 if (!next["First Form PostHog Distinct ID"]) next["First Form PostHog Distinct ID"] = getStoredIdentityEmail() || getCurrentPostHogDistinctId() || ""; 390 if (!next["First Form Email"]) next["First Form Email"] = getStoredIdentityEmail() || ""; 391 if (!next["First Form Marketing Cloud Visit ID"]) next["First Form Marketing Cloud Visit ID"] = getMarketingCloudVisitId() || ""; 392 if (!next["First Form Marketing Cloud Visitor ID"]) next["First Form Marketing Cloud Visitor ID"] = getMarketingCloudVisitorId() || ""; 393 } 394 395 writeFirstFormData(next); 396 return next; 397 } 398 399function refreshPrefill() { 400 ensurePageTitle(); 401 ensureSessionStart(); 402 ensureInitialContext(); 403 404 persistLastTouchUTMsIfPresent(); 405 persistExtraTrackingParams(); 406 407 ensureInitialUTMs(); 408 409 return ensureFirstFormPrefill(); 410} 411 412 function markFirstFormSubmitted(meta) { 413 const existing = ensureFirstFormPrefill(); 414 const next = { ...existing }; 415 416 const submittedName = meta && meta.formName ? String(meta.formName).trim() : ""; 417 const submittedId = meta && meta.formId ? String(meta.formId).trim() : ""; 418 419 if (isGenericFormName(next["First Form Name"])) next["First Form Name"] = ""; 420 if (!next["First Form Name"]) { 421 next["First Form Name"] = !isGenericFormName(submittedName) 422 ? submittedName 423 : (getFormNameFromPageTitle() || ""); 424 } 425 426 if (isGenericFormId(next["First Form ID"])) next["First Form ID"] = ""; 427 if (!next["First Form ID"] && !isGenericFormId(submittedId)) { 428 next["First Form ID"] = submittedId; 429 } 430 431 if (!next["First Form Date/Time"]) next["First Form Date/Time"] = nowIso(); 432 433 writeFirstFormData(next); 434 return next; 435 } 436 437 function clearAll() { 438 try {
439 Object.values(STORAGE_KEYS).forEach((k) => sessionStorage.removeItem(k)); 440 } catch {} 441 } 442 443 function identifyStoredEmail() { 444 if (!consented()) return ""; 445 446 const storedEmail = getStoredIdentityEmail(); 447 if (!storedEmail) return ""; 448 449 try { 450 posthog.identify(storedEmail, { 451 email: storedEmail 452 }); 453 454 posthog.register({ 455 email: storedEmail, 456 user_email: storedEmail, 457 identified_email: storedEmail 458 }); 459 460 return storedEmail; 461 } catch (err) { 462 console.warn("Stored PostHog identify failed", err); 463 return ""; 464 } 465 } 466 467 function identifySubmittedEmail(submittedEmail) { 468 if (!consented()) return ""; 469 if (!submittedEmail || !String(submittedEmail).trim()) return ""; 470 471 const email = String(submittedEmail).trim().toLowerCase(); 472 473 try { 474 const previousDistinctId = getCurrentPostHogDistinctId(); 475 476 storeIdentityEmail(email); 477 478 posthog.identify(email, { 479 email: email, 480 previous_posthog_distinct_id: previousDistinctId || "" 481 }); 482 483 posthog.register({ 484 email: email, 485 user_email: email, 486 identified_email: email 487 }); 488 489 const firstFormData = readFirstFormData(); 490 491 firstFormData["First Form Email"] = email; 492 firstFormData["First Form PostHog Distinct ID"] = email; 493 494 writeFirstFormData(firstFormData); 495 496 return email; 497 } catch (err) { 498 console.warn("PostHog identify failed", err); 499 return ""; 500 } 501 } 502 503window.__FIRST_FORM_SESSION__ = { 504 read() { 505 return { 506 page_title: getCurrentPageTitle(), 507 session_start: readSession(STORAGE_KEYS.SESSION_START, ""), 508 initial_context: readSession(STORAGE_KEYS.INITIAL_CONTEXT, null), 509 initial_utms: readSession(STORAGE_KEYS.INITIAL_UTMS, emptyUtms()), 510 last_touch_utms: readSession(STORAGE_KEYS.LAST_TOUCH_UTMS, emptyUtms()), 511 extra_tracking_params: readSession( 512 STORAGE_KEYS.EXTRA_TRACKING_PARAMS, 513 {} 514 ), 515 first_form_data: readFirstFormData() 516 }; 517 }, 518 prefill() { 519 return refreshPrefill(); 520 }, 521 markSubmitted(meta) { 522 return markFirstFormSubmitted(meta || {}); 523 }, 524 clear() { 525 clearAll(); 526 } 527 }; 528 529 (function(t,e){ 530 var o,n,p,r; 531 e.__SV||(window.posthog&&window.posthog.__loaded)|| 532 (window.posthog=e,e._i=[],e.init=function(i,s,a){ 533 function g(t,e){ 534 var o=e.split("."); 535 if (o.length === 2) { 536 t = t[o[0]]; 537 e = o[1]; 538 } 539 t[e] = function(){ 540 t.push([e].concat([].slice.call(arguments,0))); 541 }; 542 } 543 (p=t.createElement("script")).type="text/javascript"; 544 p.crossOrigin="anonymous"; 545 p.async=!0; 546 p.src=s.api_host.replace(".i.posthog.com","-assets.i.posthog.com")+"/static/array.js"; 547 (r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r); 548 var u=e; 549 for(a=a||"posthog", o="init capture identify alias get_distinct_id opt_in_capturing opt_out_capturing has_opted_in_capturing set_config register".split(" "), n=0;n<o.length;n++) g(u,o[n]); 550 e._i.push([i,s,a]); 551 },e.__SV=1); 552 })(document,window.posthog||[]); 553 554 posthog.init(PH_KEY, { 555 api_host: API_HOST, 556 persistence: consented() ? "localStorage+cookie" : "memory", 557 opt_out_capturing_by_default: consented() ? false : true, 558 autocapture: true, 559 capture_pageview: false, 560 loaded: function () { 561 identifyStoredEmail(); 562 refreshPrefill(); 563 564 565 if (consented()) { 566 posthog.register(getSharedTrackingProperties()); 567 posthog.capture("$pageview"); 568 } 569 } 570 }); 571 572 function buildIframePayload() { 573 refreshPrefill(); 574 575 return { 576 type: "semarchy_first_form_context", 577 consented: consented(), 578 parentOrigin: PARENT_ORIGIN, 579 pageTitle: getCurrentPageTitle(), 580 pageUrl: window.location.href, 581 pagePath: window.location.pathname + window.location.search + window.location.hash, 582 firstFormData: readFirstFormData(), 583 lastTouchUtms: readSession(STORAGE_KEYS.LAST_TOUCH_UTMS, emptyUtms()), 584 distinctId: consented() ? (getStoredIdentityEmail() || getCurrentPostHogDistinctId()) : "", 585 formMeta: { 586 form_id: "", 587 form_name: "" 588 } 589 }; 590 } 591 592 function sendContextToIframe(iframe) { 593 if (!iframe || !iframe.contentWindow) return; 594 try {
595 iframe.contentWindow.postMessage(buildIframePayload(), IFRAME_ORIGIN); 596 } catch (e) { 597 console.warn("iframe postMessage failed", e); 598 } 599 } 600 601 function hookIframes() { 602 document.querySelectorAll(`iframe[src*="${IFRAME_MATCH}"]`).forEach((fr) => { 603 if (fr.dataset.semarchyHooked === "1") return; 604 fr.dataset.semarchyHooked = "1"; 605 fr.addEventListener("load", function () { 606 sendContextToIframe(fr); 607 }); 608 sendContextToIframe(fr); 609 }); 610 } 611 612 function sendContextToAllIframes() { 613 document.querySelectorAll(`iframe[src*="${IFRAME_MATCH}"]`).forEach(sendContextToIframe); 614 } 615 616 const mo = new MutationObserver(hookIframes); 617 try { 618 mo.observe(document.documentElement, { subtree: true, childList: true }); 619 } catch {} 620 621 const seen = new Set(); 622 623 window.addEventListener("message", function (e) { 624 if (e.origin !== IFRAME_ORIGIN) return; 625 626 const data = e.data; 627 if (!data || typeof data !== "object") return; 628 if (data.type !== "PH_FORM_EVENT") return; 629 630 if (data.msg_id) { 631 if (seen.has(data.msg_id)) return; 632 seen.add(data.msg_id); 633 if (seen.size > 500) seen.clear(); 634 } 635 636 if (data.event === "salesforce_form_submitted") { 637 markFirstFormSubmitted({ 638 formName: data.props && data.props.form_name, 639 formId: data.props && data.props.form_id 640 }); 641 642 const submittedEmail = findEmailInProps(data.props); 643 const identifiedEmail = identifySubmittedEmail(submittedEmail); 644 const finalEmail = identifiedEmail || submittedEmail || ""; 645 646 if (consented()) { 647 try { 648 setTimeout(function () { 649 if (finalEmail) { 650 posthog.identify(finalEmail, { 651 email: finalEmail 652 }); 653 654 posthog.register({ 655 email: finalEmail, 656 user_email: finalEmail, 657 identified_email: finalEmail 658 }); 659 } 660 661 posthog.capture("salesforce_form_submitted", { 662 ...(data.props || {}), 663 ...getSharedTrackingProperties(), 664 email: finalEmail, 665 user_email: finalEmail, 666 identified_email: finalEmail, 667 event_source: "iframe_postmessage" 668 }); 669 }, finalEmail ? 800 : 0); 670 } catch (err) { 671 console.warn("PostHog capture failed", err); 672 } 673 } 674 } 675 }, false); 676 677 function handleConsentAccept(source) { 678 setConsent("yes"); 679 persistLastTouchUTMsIfPresent(); 680 persistExtraTrackingParams(); 681 682 try { 683 posthog.set_config({ persistence: "localStorage+cookie" }); 684 posthog.opt_in_capturing(); 685 686 identifyStoredEmail(); 687 refreshPrefill(); 688 689 posthog.register(getSharedTrackingProperties()); 690 691 if (!sessionStorage.getItem("sem_tracking_synced_v1")) { 692 posthog.capture("utm_and_extra_tracking", { 693 ...getSharedTrackingProperties(), 694 event_source: "website" 695 }); 696 697 sessionStorage.setItem("sem_tracking_synced_v1", "true"); 698 } 699 700 posthog.capture("cookie_consent_opt_in", { 701 consent_value: "yes", 702 consent_source: source, 703 url: location.href 704 }); 705 } catch (_) {} 706 707 setTimeout(function () { 708 refreshPrefill(); 709 hookIframes(); 710 sendContextToAllIframes(); 711 }, 300); 712 } 713 714 function handleConsentReject(source) { 715 setConsent("no"); 716 717 try { 718 posthog.set_config({ persistence: "memory" }); 719 posthog.opt_out_capturing(); 720 } catch (_) {} 721 722 setTimeout(function () { 723 hookIframes(); 724 sendContextToAllIframes(); 725 }, 300); 726 } 727 728 document.addEventListener("cookieyes_consent_update", function (e) { 729 cookieYesHasAnalytics(e.detail) ? handleConsentAccept("cookieyes") : handleConsentReject("cookieyes"); 730 }); 731 732 window.addEventListener("load", function () { 733 refreshPrefill(); 734 hookIframes(); 735 736 setTimeout(function () { 737 refreshPrefill(); 738 sendContextToAllIframes(); 739 }, 300); 740 741 console.log("First Form session state:", window.__FIRST_FORM_SESSION__.read()); 742 }); 743 744 document.addEventListener("visibilitychange", function () { 745 if (!document.hidden) { 746 identifyStoredEmail(); 747 refreshPrefill(); 748 sendContextToAllIframes(); 749 } 750 }); 751})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.