Příběh tajemné pacientky Anny O. Proč se zapsala do dějin psychiatrie a feminismu?

Sdílet

Autor: Wikipedia Commons, podle licence: Public Domain
Pacientka Anna O. byla odjakživa spojována s hysterií, s doktorem Freudem a s počátky psychoanalýzy. Její příběh obohacuje psychologické příručky a bývá uváděn jako jedna ze zásadních kazuistik.

Šlo o velmi inteligentní a vzdělanou dámu, která zasvětila svůj život pomoci ženám a prosazování feministických názorů. Zřejmě k tomu měla své důvody. Jedním z omylů je třeba tvrzení, že byla Freudovou pacientkou. Ve skutečnosti duševní zdraví této ženy ovlivnil zcela jiný muž a Freud to na něj nakonec práskl.

Hysterii dívky spustila vážná nemoc otce

Pod anonymním jménem Anna O. byla vedena psychiatrická pacientka Berta Pappenheim (1859–1936), která se narodila do vážené a bohaté židovské rodiny, mezi jejíž členy patřil i známý německý básník Heinrich Heine. Bertě se dostalo důkladného vzdělání i pevné víry a jako každá jiná dívka z vyšší třídy měla uspět na svatebním trhu a zakotvit ve vhodném manželství, čemuž předcházela dokonalá příprava spočívající ve vzdělání a dalších dovednostech.

Berta ale nebyla obyčejná dívka a do tohoto světa jaksi nezapadala. Snila o něčem jiném a měla v hlavě spoustu příběhů. Milovala jízdu na koni a svou svobodu, které se jí nedostávalo. Když onemocněl její otec vážným zánětem pohrudnice a hrozilo, že zemře, projevily se u ní podivné symptomy.


Dnešní „hysterky“ by před lety skončily v blázinci
Přečtěte si také:

Dnešní „hysterky“ by před lety skončily v blázinci

Přivolaný rodinný lékař Josef Breuer dívce diagnostikoval hysterii. Následovaly další fyzické i psychické příznaky, které Bertě znemožnily vést normální život. Patřily mezi ně například různé podivné bolesti, rozostřené vidění, neuralgie trojklanného nervu, změněné stavy vědomí, zuřivost a také afázie, která se projevovala tak, že Berta nemluvila německy, pouze jinými jazyky, kterých velice dobře uměla víc než dost. V té době jí bylo jednadvacet let. Možná to byla jen její ochrana před tím, aby dívku rodina provdala.

Vymetání komínu prý zabíralo

Doktor Breuer si všiml, že se stav Berty lepší tehdy, když mu vypráví příběhy svého života i ty vymyšlené ze svého nitra. Tento proces nazývala vymetáním komínu nebo též léčbu mluvením. Když Bertin otec zemřel, Bertin stav se rapidně zhoršil.

Breuerův kolega tehdy chtěl vyvolat ve zcela apatické a negativní Bertě nějakou reakci, proto ji foukl do obličeje kouř ze zapáleného papíru. Berta se následně rozzuřila a začala troufalce bít. Doktor Breuer ale nebyl spokojen s tím, jak se vyvíjí Bertino duševní zdraví, proto ji proti její vůli umístil do nervového sanatoria, kde jí byl podáván sedativní chloralhydrát, který u ní posléze způsobil závislost.

Německá poštovní známka z roku 1954

Německá poštovní známka z roku 1954

Autor: Wikipedia Commons

Berta se údajně uzdravila o rok později v roce 1882 poté, co si při dalším „vymetání komínu“ znovu prožila scénu u lůžka svého otce, která byla spouštěčem jejích duševních obtíží. Všechny symptomy najednou zmizely, Berta byla propuštěna a začala cestovat po světě. Tento malý zázrak byl klíčem k počátkům psychoanalýzy a tak to vše popsal nejen Breuer ve svých kazuistikách, ale i Freud, který popisoval Anninu terapii mluvením jako „ohromný léčebný úspěch“ (1923). Realita však prý byla zcela jiná a Freud to údajně dobře věděl.

Podle historiků Henriho Ellenbergera a Albrechta Hirschmüllera léčba pacientky Anny O. byla pro doktora Breuera velmi náročná a ani Berta nebyla při zpětném hodnocení této části svého života s lékařskými postupy spokojená. Protože se stav Berty stále nezlepšoval, Breuer ji chtěl předat do péče jiného psychiatra, svého švýcarského kolegy Roberta Binswangera, který působil v luxusním sanatoriu Bellevue u Bodamského jezera.

Kromě toho se spekulovalo o tom, že doktor Breuer má se svou pacientkou intimní poměr a jeho manželka na vymetání komínu svého manžela žárlí oprávněně. Důvodů k tomu, proč Bertu poslat pryč, tedy bylo víc než dost.

Jízda na koni v luxusním sanatoriu Bellevue ve Švýcarsku

Berta tehdy v Bellevue skutečně skončila, ale neměla se tam nijak špatně. S pacienty bylo zacházeno jako v rukavičkách a měli k dispozici spoustu vyžití, například Berta ráda jezdívala na koni. Byla tam také oranžerie, bowling, tenisové kurty, venkovní kuchyně, kulečník i místnost pro hudbu.


Dějiny šílenství: hysterie se léčila vibrátorem
Přečtěte si také:

Dějiny šílenství: hysterie se léčila vibrátorem

Pacienti byli ubytovaní v pohodlných vilách rozesetých po celém parku. Berta měla s sebou společnici, a protože stále nemohla mluvit německy, komunikovaly spolu anglicky a francouzsky. Bohužel kromě závislosti na chloralu si do sanatoria přivezla i závislost na morfiu. V podstatě se dá říct, že v tehdejší době se vinou lékařů z pacientů stávali ještě navíc i narkomani.

Při odchodu z léčebny a opětovném návratu do Vídně nebylo jasně řečeno, zda je Berta na tom líp, či nikoli. Další roky byla znovu několikrát přijata na klinice s příznaky hysterie. Svých potíží se zbavila až skoro ve třiceti a možná k tomu Breuerova psychoterapie ani nepřispěla.

Co všechno na Breuera práskl Freud

Freud napsal v dopise své snoubence, která ji znala, že doktor Breuer o Bertě prohlašoval, že by pro ni bylo lepší, kdyby byla mrtvá a zbavena svého utrpení. Kromě toho Freud odhalil šokující případ hysterického těhotenství Berty, která v agónii tvrdila, že čeká dítě s Breuerem. Kdo ví, co na tom bylo pravdy. Duševně nemocným pacientkách nikdo nevěří a očekává se, že jsou to výplody jejich choré mysli, ale kde byla skutečná pravda, se můžeme jen domnívat.

I když Freud podpořil význam psychoterapie při léčbě Anny O., soukromě svým žákům ale prý řekl, že Breuerova léčby Anny O. byla fiaskem. Freud očividně nakonec vystupoval proti Breuerovi, s nímž se názorově rozešel.

Od léčby mluvením k léčbě psaním a službě druhým

Zdá se, že teprve až ve třiceti Berta našla smysl svého života a její hysterické příznaky odezněly. Jako vysvětlení se nabízí, že se konečně vymanila z vlivů psychiatrů a prostředí léčeben a příběhy ze své hlavy na radu své přítelkyně přenesla na papír.

Nejprve vydala anonymně sbírku pohádek pro děti, které v průběhu hypnózy vyprávěla doktoru Breuerovi. Později přišla na svět sbírka povídek In The Second Hand Shop, a to pod pseudonymem P. Berthold. Kromě toho se zapojila jako dobrovolnice ve vývařovnách pro imigranty a v sirotčinci pro židovské dívky. Za svou práci nežádala peníze a bezplatně pomáhala tam, kde se dalo.

Její služba druhým a to, že se nebála práce, nebylo typické pro vzdělanou a bohatou ženu třídy, z jaké pocházela. Též šířila myšlenky feministického hnutí, s nimiž se plně ztotožňovala. V roce 1899 přeložila do němčiny Obhajobu práv ženy (1792) anglické feministky Mary Wollstonecraft a též vydala hru nazvanou Ženská práva, v níž kritizovala ekonomické a sexuální zneužívání žen. Roku 1900 napsala knihu Židovský problém v Galicii, kde vyslovila názor, že chudoba Židů ve východní Evropě může souviset s jejich nedostatečným vzděláním.

Sociální práce Berty Pappenheim a její přínos pro židovské ženy

V roce 1902 Berta Pappenheim založila spolek na pomoc židovským ženám (Weibliche Fürsorge), kde bylo ženám poskytováno přístřeší, poradenství, pracovní školení a doporučení pro zaměstnání. Spustila také kampaň na odsouzení prostituce a sexuálního otroctví ve východoevropských židovských komunitách. To sice vyvolalo kritiku ze strany rabínů, kteří se obávali nárůstu antisemitismu, ale inteligentní Berta z toho hravě vybruslila.

O dva roky později ještě založila Ligu židovských žen (Jüdischer Frauenbund neboli JFB), v níž byla zvolena předsedkyní, což jí umožnilo cestovat po celém světě. Tato liga se stala největší židovskou ženskou organizací v Německu a jejím cílem bylo, aby ženy mohly pracovat a stát se nezávislými.

V roce 1907 pak vybudovala v Neu-Isenburgu, kde žila, domov pro neprovdané matky a nemanželské děti. Dál psala a překládala, například ženskou bibli z jidiš, sbírku starověkých talmudských příběhů pro ženy nebo deník významné židovské ženy Glückel von Hameln (1646–1724), která byla dokonce jejím vzdáleným předkem. V roce 1920 byla také pozvána, aby vyučovala v centru židovských studií ve Frankfurtu.

Kromě toho napsala bezpočet básniček, příběhů a her pro děti. Její modlitby, vydány v roce 1936 po její smrti, těšily židovské ženy v době nacismu. Berta zemřela již velmi nemocná rakovinou po jednom výslechu na gestapu. Její smrt v době počínajícího nacismu byla pro ni jednoznačným vysvobozením.

Anna O. jako oběť psychoterapie

Dle očekávání Berta Pappenheim nebyla nijak pyšná na svou minulost, která se týkala psychiatrické léčby a pobytů v sanatoriích. Nepřála si, aby se o tom vůbec mluvilo či vědělo. Psychoanalýzu prý nikomu v budoucnu nedoporučovala, naopak od ní odrazovala. Podle některých kontroverzních teorií dokonce své příznaky předstírala, možná proto, aby se vyhnula životu, který jako feministka žít nechtěla.

Zásadní ale je to, že se z labilní a hysterické ženy, která si nevěděla rady se svým životem a podlehla závislostem, stala plodná autorka a obětavá a úspěšná žena sledující svůj cíl pomáhat židovským ženám.

Za své zásluhy se jí posmrtně dostalo cti být na německé poštovní známce z roku 1954. Jen o rok dříve odhalil Ernest Jones v prvním díle Freudova životopisu pravou identitu Anny O.

Zdroje:
Psychylogy Today: Bertha Pappenheim (1859–1936)
The Story of Bertha Pappenheim – Anna O
Borch-Jacobsen, M. Pacienti Sigmunda Freuda. Frýdek-Místek Alpress 2022

Autor článku

Externí redaktorka a copywriterka píšící pro webové i tištěné magazíny. Zaměřuje se na oblast zdraví, historie medicíny, psychologie, filozofie, etikoterapie a alternativní medicíny.

'; document.getElementById('preroll-iframe').onload = function () { setupIframe(); } prerollContainer = document.getElementsByClassName('preroll-container-iframe')[0]; } function setupIframe() { prerollDocument = document.getElementById('preroll-iframe').contentWindow.document; let el = prerollDocument.createElement('style'); prerollDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:20px;right:25px}"; videoContent = prerollDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('PREROLL sound allowed'); // setUpIMA(true); videoContent.volume = 1; videoContent.muted = false; setUpIMA(); }).catch(function () { console.log('PREROLL sound forbidden'); videoContent.volume = 0; videoContent.muted = true; setUpIMA(); }); } } function setupDimensions() { prerollWidth = Math.min(iinfoPrerollPosition.offsetWidth, 480); prerollHeight = Math.min(iinfoPrerollPosition.offsetHeight, 320); } function setUpIMA() { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Preroll advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = prerollWidth; // adsRequest.linearAdSlotHeight = prerollHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. prerollDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( prerollDocument.getElementById('adContainer'), videoContent); } function unmutePrerollAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } } function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(prerollWidth, prerollHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } function onAdEvent(adEvent) { const ad = adEvent.getAd(); console.log('Preroll event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: if (!ad.isLinear()) { videoContent.play(); } prerollDocument.getElementById('adContainer').style.width = '100%'; prerollDocument.getElementById('adContainer').style.maxWidth = '640px'; prerollDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); if (ad.isLinear()) { intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } prerollDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (prerollLastError === 303) { playYtVideo(); } break; case google.ima.AdEvent.Type.COMPLETE: if (ad.isLinear()) { clearInterval(intervalTimer); } playYtVideo(); break; } } function onAdError(adErrorEvent) { console.log(adErrorEvent.getError()); prerollLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { playYtVideo(); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoPrerollPosition.remove(); playPrerollAd(); } else { return false; } adVolume = 1; return true; } function onContentPauseRequested() { videoContent.pause(); } function onContentResumeRequested() { videoContent.play(); } function onActiveView() { if (prerollContainer) { const containerOffset = prerollContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (prerollPaused) { adsManager.resume(); prerollPaused = false; } return true; } else { if (!prerollPaused) { adsManager.pause(); prerollPaused = true; } } } return false; } function playYtVideo() { iinfoPrerollPosition.remove(); youtubeIframe.style.display = 'block'; youtubeIframe.src += '&autoplay=1&mute=1'; } }
Upozorníme vás na články, které by vám neměly uniknout (maximálně 2x týdně).
'; document.getElementById('outstream-iframe').onload = function () { setupIframe(); } replayScreen = document.getElementById('iinfoOutstreamReplay'); iinfoOutstreamPosition = document.getElementById('iinfoOutstreamPosition'); outstreamContainer = document.getElementsByClassName('outstream-container')[0]; setupReplayScreen(); } function setupIframe() { outstreamDocument = document.getElementById('outstream-iframe').contentWindow.document; let el = outstreamDocument.createElement('style'); outstreamDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:-5px;right:25px}"; videoContent = outstreamDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; if ( location.href.indexOf('rejstriky.finance.cz') !== -1 || location.href.indexOf('finance-rejstrik') !== -1 || location.href.indexOf('firmy.euro.cz') !== -1 || location.href.indexOf('euro-rejstrik') !== -1 || location.href.indexOf('/rejstrik/') !== -1 || location.href.indexOf('/rejstrik-firem/') !== -1) { outstreamDirectPlayed = true; soundAllowed = true; iinfoVastUrlIndex = 0; } if (!outstreamDirectPlayed) { console.log('OUTSTREAM direct'); setUpIMA(true); } else { if (soundAllowed) { const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('OUTSTREAM sound allowed'); setUpIMA(false); }).catch(function () { console.log('OUTSTREAM sound forbidden'); renderBanner(); }); } } else { renderBanner(); } } } function getWrapper() { let articleWrapper = document.querySelector('.rs-outstream-placeholder'); // Outstream Placeholder from RedSys manipulation if (articleWrapper && articleWrapper.style.display !== 'block') { articleWrapper.innerHTML = ""; articleWrapper.style.display = 'block'; } // Don't render OutStream on homepages if (articleWrapper === null) { if (document.querySelector('body.p-index')) { return null; } } if (articleWrapper === null) { articleWrapper = document.getElementById('iinfo-outstream'); } if (articleWrapper === null) { articleWrapper = document.querySelector('.layout-main__content .detail__article p:nth-of-type(6)'); } if (articleWrapper === null) { // Euro, Autobible, Zdravi articleWrapper = document.querySelector('.o-article .o-article__text p:nth-of-type(6)'); } if (articleWrapper === null) { articleWrapper = document.getElementById('sidebar'); } if (!articleWrapper) { console.error("Outstream wrapper of article was not found."); } return articleWrapper; } function setupDimensions() { outstreamWidth = Math.min(iinfoOutstreamPosition.offsetWidth, 480); outstreamHeight = Math.min(iinfoOutstreamPosition.offsetHeight, 320); } /** * Sets up IMA ad display container, ads loader, and makes an ad request. */ function setUpIMA(direct) { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); if (direct) { adsRequest.adTagUrl = directVast; console.log('Outstream DIRECT CAMPAING advert: ' + directVast); videoContent.muted = true; videoContent.volume = 0; outstreamDirectPlayed = true; } else { adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Outstream advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; } // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = outstreamWidth; // adsRequest.linearAdSlotHeight = outstreamHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function setupReplayScreen() { replayScreen.addEventListener('click', function () { iinfoOutstreamPosition.remove(); iinfoVastUrlIndex = 0; outstreamInit(); }); } /** * Sets the 'adContainer' div as the IMA ad display container. */ function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. outstreamDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( outstreamDocument.getElementById('adContainer'), videoContent); } function unmuteAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } } /** * Loads the video content and initializes IMA ad playback. */ function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(outstreamWidth, outstreamHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } /** * Handles the ad manager loading and sets ad event listeners. * @param { !google.ima.AdsManagerLoadedEvent } adsManagerLoadedEvent */ function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } /** * Handles actions taken in response to ad events. * @param { !google.ima.AdEvent } adEvent */ function onAdEvent(adEvent) { // Retrieve the ad from the event. Some events (for example, // ALL_ADS_COMPLETED) don't have ad object associated. const ad = adEvent.getAd(); console.log('Outstream event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: // This is the first event sent for an ad - it is possible to // determine whether the ad is a video ad or an overlay. if (!ad.isLinear()) { // Position AdDisplayContainer correctly for overlay. // Use ad.width and ad.height. videoContent.play(); } outstreamDocument.getElementById('adContainer').style.width = '100%'; outstreamDocument.getElementById('adContainer').style.maxWidth = '640px'; outstreamDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); // This event indicates the ad has started - the video player // can adjust the UI, for example display a pause button and // remaining time. if (ad.isLinear()) { // For a linear ad, a timer can be started to poll for // the remaining time. intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } outstreamDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (outstreamLastError === 303) { if (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } } break; case google.ima.AdEvent.Type.COMPLETE: // This event indicates the ad has finished - the video player // can perform appropriate UI actions, such as removing the timer for // remaining time detection. if (ad.isLinear()) { clearInterval(intervalTimer); } if (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } break; } } /** * Handles ad errors. * @param { !google.ima.AdErrorEvent } adErrorEvent */ function onAdError(adErrorEvent) { // Handle the error logging. console.log(adErrorEvent.getError()); outstreamLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { renderBanner(); } } function renderBanner() { if (isBanner) { console.log('Outstream: Render Banner'); iinfoOutstreamPosition.innerHTML = ""; iinfoOutstreamPosition.style.height = "330px"; iinfoOutstreamPosition.appendChild(bannerDiv); } else { console.log('Outstream: Banner is not set'); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoOutstreamPosition.remove(); outstreamInit(); } else { return false; } adVolume = 1; return true; } /** * Pauses video content and sets up ad UI. */ function onContentPauseRequested() { videoContent.pause(); // This function is where you should setup UI for showing ads (for example, // display ad timer countdown, disable seeking and more.) // setupUIForAds(); } /** * Resumes video content and removes ad UI. */ function onContentResumeRequested() { videoContent.play(); // This function is where you should ensure that your UI is ready // to play content. It is the responsibility of the Publisher to // implement this function when necessary. // setupUIForContent(); } function onActiveView() { if (outstreamContainer) { const containerOffset = outstreamContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (outstreamPaused) { adsManager.resume(); outstreamPaused = false; } return true; } else { if (!outstreamPaused) { adsManager.pause(); outstreamPaused = true; } } } return false; } let outstreamInitInterval; if (typeof cpexPackage !== "undefined") { outstreamInitInterval = setInterval(tryToInitializeOutstream, 100); } else { const wrapper = getWrapper(); if (wrapper) { let outstreamInitialized = false; window.addEventListener('scroll', () => { if (!outstreamInitialized) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { outstreamInit(); outstreamInitialized = true; } } }); } } function tryToInitializeOutstream() { const wrapper = getWrapper(); if (wrapper) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { if (cpexPackage.adserver.displayed) { clearInterval(outstreamInitInterval); outstreamInit(); } } } else { clearInterval(outstreamInitInterval); } } }
OSZAR »