(function () {
// 1) Basic bot filter (extend if you like)
function isBot() {
return /(bot|crawl|spider|google|bing|slurp|yandex|facebook|linkedin|pinterest|preview|whatsapp|discord|telegram|headless|puppeteer)/i
.test(navigator.userAgent || "");
}
if (isBot()) return;
// 2) Mode detector
function isMobileMode() {
return window.matchMedia("(max-width: 767px)").matches ||
/Mobi|Android|iPhone|iPad|iPod/i.test(navigator.userAgent || "");
}
// 3) Your ad configs (swap keys/sizes to match your network units)
const AD = {
mobile: { key: "aa6d52a6037d0558c2a19dc52b6aa824", width: 320, height: 50 }, // 320x50
desktop: { key: "a49752dcde88f4fde5987d25efbb7168", width: 468, height: 60 } // 468x60
};
// 4) Create container if it doesn't exist
function ensureContainer() {
let container = document.getElementById("ad-container");
if (!container) {
container = document.createElement("div");
container.id = "ad-container";
container.style.display = "none";
document.body.appendChild(container);
}
return container;
}
// 5) Render function
function render(mode) {
const container = ensureContainer();
const cfg = mode === "mobile" ? AD.mobile : AD.desktop;
// Set global atOptions for ad network
window.atOptions = {
key: cfg.key,
format: "iframe",
height: cfg.height,
width: cfg.width,
params: {}
};
// Clear previous ad/script then inject
container.innerHTML = "";
container.style.display = "block";
const s = document.createElement("script");
s.src = `//selfportraitproved.com/${cfg.key}/invoke.js`;
s.async = true;
container.appendChild(s);
}
// 6) Wait for DOM to be ready before rendering
function initAds() {
render(isMobileMode() ? "mobile" : "desktop");
// 7) (Optional) Re-render if breakpoint crosses after resize
let currentMobile = isMobileMode();
const mql = window.matchMedia("(max-width: 767px)");
if (mql.addEventListener) {
mql.addEventListener("change", (e) => {
const nowMobile = e.matches;
if (nowMobile !== currentMobile) {
currentMobile = nowMobile;
render(currentMobile ? "mobile" : "desktop");
}
});
} else if (mql.addListener) { // older browsers
mql.addListener((e) => {
const nowMobile = e.matches;
if (nowMobile !== currentMobile) {
currentMobile = nowMobile;
render(currentMobile ? "mobile" : "desktop");
}
});
}
}
// 8) Execute when DOM is ready
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", initAds);
} else {
initAds();
}
})();
Shannon Spake is a Sportscaster born on July 23, 1976 in Florida. She has built a successful career in the sports industry and has become a well-known figure in the media. Her net worth, biography, age, height, family and career updates are widely available online. Shannon Spake is a member of Sportscaster
Age, Biography and Wiki
💰 Net worth
Shannon Spake, a prominent sportscaster based in Florida, is expected to have a net worth ranging from $100,000 to $1 million by the year 2024. Renowned for her expertise and extensive experience in the field, Shannon has established herself as a highly respected figure in the world of sports broadcasting. Known for her infectious enthusiasm and insightful analysis, she has garnered a dedicated fan base and numerous opportunities in the industry. With her remarkable career trajectory, Shannon's net worth is projected to continue rising in the coming years.
Sports reporter who is famous for her time as a NASCAR and NCAA sports for Fox Sports. She previously worked as an anchor for ESPN's flagship SportsCenter program prior to joining Fox Sports.
She earned her bachelor's degree from Florida Atlantic University. She first joined Speed Channel as a correspondent in 2005.
In February 2017, she was named the co-host of Fox Sports' NASCAR Race Hub program. She has also worked for Fox Sports as an NFL sideline reporter.
👉 For more insights, check out this resource.
She married her husband Jerry in April 2008. She has twin boys named Liam and Brady.
She and Danielle Trotta have both served as co-hosts for NASCAR Race Hub.
👉 Discover more in this in-depth guide.