(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();
}
})();
Ocean Whitaker is an editor born to Forest Whitaker and his unknown ex-lover. His father Forest Whitaker is an American actor, producer, and director. He is the recipient of various accolades, including an Academy Award, a Golden Globe Award, a British Academy Film Award, and two Screen Actors Guild Awards.
Ocean Whitaker Bio, age
Ocean Whitaker’s full name is Ocean Alexander Whitaker and the first child of his parents. He was born on April 13, 1990 in Los Angeles, California, USA. He is 33 years old.
Ocean Whitaker family
Ocean Whitaker is not known to be married or have any children. He has three siblings. He is a paternal older half-brother of True Whitaker and Sonnet Noel Whitaker and a stepbrother to Autumn Whitaker.
👉 For more insights, check out this resource.
Ocean Whitaker’s great-grandparent is Forest Whitaker Sr., and his grandparents are Forest Steven Jr. and Laura Francis Smith. Deborah Whitaker is his aunt.
Ocean Whitaker mother
Ocean Whitaker’s birth mother is not known. He was the stepson of his father’s ex-wife Keisha Whitaker.
👉 Discover more in this in-depth guide.
Ocean Whitaker profession
Ocean Whitaker is an editor, known for Montebello in 2022, THE GAME OF SILENCE in 2022, and Another Try in 2021.
Ocean Whitaker Instagram
Ocean Whitaker is active on Instagram but his Instagram account is not known.
Source: Ghanafuo.com